我正在学习如何使用QtCreator外包c ++文件。
为什么QSystrayIcon和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;
}

最佳答案

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

08-06 00:22