2014-02-10 75 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