2014-02-10 40 views
0

我正在学习如何使用QtCreator在C++中外包文件。 为什么QSystrayIcon和注释窗口仅在直接在主窗口中启动时出现?如果我评论“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; 
} 

回答

3

你有traymenu实例,但不是note一个实例。 w是一个局部变量,执行traymenu::traymenu()后立即被破坏。如果您希望note实例一直存在,直到main()完成,您必须将其作为traymenu类的成员变量。

+0

“托盘”相同 – RobbieE

+0

但我该怎么做?在相应的标题traymenu.h和note.h中,构造函数是公共的,为什么它们不是成员? – user2366975

+0

至少我应该看到托盘图标出现..我的mainmenu仍然存在,为什么它应该被销毁,它被保存在主体中,不是吗? – user2366975