В моем проекте создается значок в системном трее, в котором есть контекстное меню. В этом меню я могу щелкнуть и создать как можно больше заметок (например, эти липкие заметки из окон). Однако, когда я закрыл свою последнюю заметку (нажав кнопку закрытия окна), вызывается destruktor ~Traymenu()
. Зачем? Объект trayMenu
все еще имеет активный элемент, значок systray ... И что также интересно, заключается в том, что деструктор Note::~Note()
никогда не вызывается, когда я закрываю окно заметки.Почему деструктор другого объекта называется?
main.cpp:
#include "note.h"
#include "traymenu.h"
#include <QApplication>
int main(int argc, char *argv[]){
QApplication a(argc, argv);
Traymenu trayMenu;
return a.exec();
}
traymenu.h:
#ifndef TRAYMENU_H
#define TRAYMENU_H
#include <QSystemTrayIcon>
#include <QIcon>
#include <QPixmap>
#include <QMenu>
class Note;
class Traymenu : public QSystemTrayIcon
{
public:
Traymenu();
~Traymenu();
void createMainContextMenu();
void newNote();
void exitProgram();
private:
QSystemTrayIcon mainIcon;
QMenu mainContextMenu;
std::vector<Note *> noteList;
};
#endif // TRAYMENU_H
traymenu.cpp:
#include "traymenu.h"
#include "note.h"
#include <QDebug>
Traymenu::Traymenu(){
mainIcon.setIcon(QIcon(QPixmap("C:\\program.png")));
mainIcon.setVisible(true);
mainIcon.show();
createMainContextMenu();
}
Traymenu::~Traymenu(){
qDebug() << "in ~Traymenu()" << endl;
}
void Traymenu::newNote(){
Note *nN; //new pointer to object of class Note
nN = new Note(); //Initialize pointer
noteList.push_back(nN); //add newly created object to a list
}
void Traymenu::exitProgram(){
//delete this; //deletes traymenu object (icon disappears)
}
void Traymenu::createMainContextMenu(){
QAction *actionNewNote = mainContextMenu.addAction("Neue Notiz");
mainContextMenu.addSeparator();
QAction *actionExitProgram = mainContextMenu.addAction("Programm beenden");
actionNewNote->setIcon(QIcon("C:\\new.ico"));
actionNewNote->setIconVisibleInMenu(true);
QObject::connect(actionNewNote,&QAction::triggered,this,&Traymenu::newNote);
QObject::connect(actionExitProgram,&QAction::triggered,this,&Traymenu::exitProgram);
mainIcon.setContextMenu(&mainContextMenu);
}
Похоже проблема ссылка Cicle на меня – Manu343726
Вы не удалять заметки, хранящиеся в векторе. Для каждого 'нового' должен быть' delete'. –
Вы правы, это еще не реализовано. Это должно быть причиной того, что деструктор ноты не вызывается, нормально ... Но тогда почему мой QSystemTrayIcon уничтожен после закрытия последней заметки? Я не понимаю, откуда это. О, но это не только QSystemTrayIcon, все приложение само по себе прекращается. – user2366975