外包对象创建

时间:2014-02-10 23:43:48

标签: c++ qt

我正在学习如何用QtCreator外包c ++中的文件。 为什么QSystrayIcon和Note of Note仅在主要直接启动时出现?如果我注释“2”并插入“1”以便调用“3”,则不会出现systrayIcon,并且仅在非常短的时间内出现窗口,但会立即销毁。但为什么?我有一个名为mainmenu的traymenu的实例仍然存在于主体中,它怎么能被破坏?

main.cpp中:

#include "traymenu.h"
#include "note.h"
#include <QApplication>
#include <QSystemTrayIcon>
#include <QIcon>
#include <QPixmap>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    traymenu mainmenu;              //1

//    note w;                       //2
//    w.show();
//    QSystemTrayIcon tray;
//    tray.setIcon(QIcon(QPixmap("C:\\testicon.png")));
//    tray.setVisible(true);

    return a.exec();
}

traymenu.cpp:

#include "traymenu.h"
#include "note.h"
#include <QSystemTrayIcon>
#include <QIcon>
#include <QPixmap>

traymenu::traymenu(QWidget *parent)
{

    note w;                        //3
    w.show();

    QSystemTrayIcon tray;
    tray.setIcon(QIcon(QPixmap("C:\\testicon.png")));
    tray.setVisible(true);
    tray.show();
}

traymenu::~traymenu()
{

}

note.cpp:

#include "note.h"
#include "ui_note.h"

note::note(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::note)
{
    ui->setupUi(this);
}

note::~note()
{
    delete ui;
}

1 个答案:

答案 0 :(得分:3)

您有traymenu的实例,但不是note的实例。 w是一个局部变量,在traymenu::traymenu()执行后会立即销毁。如果您希望note实例在main()完成之前存在,则必须使其成为traymenu类的成员变量。