close one window close others
-
i opend three windows by main file .but when close the "coreaction" it closes all the whole app. but other two closes it's window .
NT : the corecation is a framlesss window.it is closed by tryicon.
here is the main
int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setAttribute(Qt::AA_EnableHighDpiScaling); app.setQuitOnLastWindowClosed(true); startSetup(); // Set application info app.setOrganizationName("o"); app.setApplicationName("o"); app.setWindowIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); Start s; s.show(); corefm a; a.show(); // closing this ,close other two. coreaction e; e.show(); return app.exec(); }
and the quiting function of coreaction. by exc this all the window is closing.
void coreaction::tryicon() //setup coreaction tryicon { trayIcon=new QSystemTrayIcon(this); trayIconMenu=new QMenu(this); QAction *QAshow=new QAction("&Show",this); QAction *QAabout=new QAction("&About",this); QAction *QAquit=new QAction("&Quit",this); trayIconMenu->addAction(QAshow); trayIconMenu->addAction(QAabout); trayIconMenu->addSeparator(); trayIconMenu->addAction(QAquit); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); trayIcon->setToolTip("CoreAction"); trayIcon->show(); connect(QAquit, SIGNAL(triggered()),this,SLOT(close())); connect(QAshow, SIGNAL(triggered()),this,SLOT(actionshow())); connect(QAabout, &QAction::triggered, this, &coreaction::coreBoxAbout); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(ShowWindow(QSystemTrayIcon::ActivationReason))); }
-
i opend three windows by main file .but when close the "coreaction" it closes all the whole app. but other two closes it's window .
NT : the corecation is a framlesss window.it is closed by tryicon.
here is the main
int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setAttribute(Qt::AA_EnableHighDpiScaling); app.setQuitOnLastWindowClosed(true); startSetup(); // Set application info app.setOrganizationName("o"); app.setApplicationName("o"); app.setWindowIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); Start s; s.show(); corefm a; a.show(); // closing this ,close other two. coreaction e; e.show(); return app.exec(); }
and the quiting function of coreaction. by exc this all the window is closing.
void coreaction::tryicon() //setup coreaction tryicon { trayIcon=new QSystemTrayIcon(this); trayIconMenu=new QMenu(this); QAction *QAshow=new QAction("&Show",this); QAction *QAabout=new QAction("&About",this); QAction *QAquit=new QAction("&Quit",this); trayIconMenu->addAction(QAshow); trayIconMenu->addAction(QAabout); trayIconMenu->addSeparator(); trayIconMenu->addAction(QAquit); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); trayIcon->setToolTip("CoreAction"); trayIcon->show(); connect(QAquit, SIGNAL(triggered()),this,SLOT(close())); connect(QAshow, SIGNAL(triggered()),this,SLOT(actionshow())); connect(QAabout, &QAction::triggered, this, &coreaction::coreBoxAbout); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(ShowWindow(QSystemTrayIcon::ActivationReason))); }
-
i opend three windows by main file .but when close the "coreaction" it closes all the whole app. but other two closes it's window .
NT : the corecation is a framlesss window.it is closed by tryicon.
here is the main
int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setAttribute(Qt::AA_EnableHighDpiScaling); app.setQuitOnLastWindowClosed(true); startSetup(); // Set application info app.setOrganizationName("o"); app.setApplicationName("o"); app.setWindowIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); Start s; s.show(); corefm a; a.show(); // closing this ,close other two. coreaction e; e.show(); return app.exec(); }
and the quiting function of coreaction. by exc this all the window is closing.
void coreaction::tryicon() //setup coreaction tryicon { trayIcon=new QSystemTrayIcon(this); trayIconMenu=new QMenu(this); QAction *QAshow=new QAction("&Show",this); QAction *QAabout=new QAction("&About",this); QAction *QAquit=new QAction("&Quit",this); trayIconMenu->addAction(QAshow); trayIconMenu->addAction(QAabout); trayIconMenu->addSeparator(); trayIconMenu->addAction(QAquit); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(":/app/icons/app-icons/CoreAction.svg")); trayIcon->setToolTip("CoreAction"); trayIcon->show(); connect(QAquit, SIGNAL(triggered()),this,SLOT(close())); connect(QAshow, SIGNAL(triggered()),this,SLOT(actionshow())); connect(QAabout, &QAction::triggered, this, &coreaction::coreBoxAbout); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(ShowWindow(QSystemTrayIcon::ActivationReason))); }
@saber said in close one window close others:
but other two closes it's window .
This is correct behaviour - closing a widget does NOT close the whole app
-
@saber said in close one window close others:
but other two closes it's window .
This is correct behaviour - closing a widget does NOT close the whole app
-
but other two closes it's window .
that behaviour is good .but why the coreaction is closing it's framless window also the other two window.?
-
/* CoreBox is combination of some common desktop apps. CoreBox is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see {http://www.gnu.org/licenses/}. */ #ifndef COREACTION_H #define COREACTION_H #include "wcalender.h" #include "wsystem.h" #include "wnetwork.h" #include "wcalculator.h" #include "wnotes.h" #include "wbattery.h" #include <QWidget> #include <QFocusEvent> #include <QCloseEvent> #include <QDir> #include <QMenu> #include <QSystemTrayIcon> #include <QTimer> #include <QDesktopWidget> #include <QDateTime> #include <QTimer> #include <QFile> #include <QDoubleValidator> #include "settings/settingsmanage.h" #include "utilities/globalfunctions.h" #include "about/about.h" #include "dashboard/info_manager.h" #include "dashboard/upower.h" #include "dashboard/battery.h" #include "coreshot/coreshotdialog.h" namespace Ui { class coreaction; } class coreaction : public QWidget { Q_OBJECT public: explicit coreaction(QWidget *parent = nullptr); ~coreaction(); QSystemTrayIcon *trayIcon; void focusOutEvent(QFocusEvent *event); void loadsettings(); protected: void closeEvent(QCloseEvent *event); private: Ui::coreaction *ui; SettingsManage sm; QMenu *trayIconMenu; QDir currentDir; QTimer *timer; InfoManager *im; void widget(); void tryicon(); void widgetList(); bool checkWTime(); bool checkWCalendar(); bool checkWSystem(); bool checkWNetwork(); bool checkWCalculator(); bool checkWNotes(); bool checkWBattery(); public slots: void ShowWindow(QSystemTrayIcon::ActivationReason Reason); private slots: void showTime(); void coreBoxAbout(); void actionshow(); void on_corepad_clicked(); void on_screenshot_clicked(); void on_corepaint_clicked(); void on_corefm_clicked(); void on_start_clicked(); void on_search_clicked(); }; #endif // COREACTION_H
-
/* CoreBox is combination of some common desktop apps. CoreBox is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see {http://www.gnu.org/licenses/}. */ #ifndef COREACTION_H #define COREACTION_H #include "wcalender.h" #include "wsystem.h" #include "wnetwork.h" #include "wcalculator.h" #include "wnotes.h" #include "wbattery.h" #include <QWidget> #include <QFocusEvent> #include <QCloseEvent> #include <QDir> #include <QMenu> #include <QSystemTrayIcon> #include <QTimer> #include <QDesktopWidget> #include <QDateTime> #include <QTimer> #include <QFile> #include <QDoubleValidator> #include "settings/settingsmanage.h" #include "utilities/globalfunctions.h" #include "about/about.h" #include "dashboard/info_manager.h" #include "dashboard/upower.h" #include "dashboard/battery.h" #include "coreshot/coreshotdialog.h" namespace Ui { class coreaction; } class coreaction : public QWidget { Q_OBJECT public: explicit coreaction(QWidget *parent = nullptr); ~coreaction(); QSystemTrayIcon *trayIcon; void focusOutEvent(QFocusEvent *event); void loadsettings(); protected: void closeEvent(QCloseEvent *event); private: Ui::coreaction *ui; SettingsManage sm; QMenu *trayIconMenu; QDir currentDir; QTimer *timer; InfoManager *im; void widget(); void tryicon(); void widgetList(); bool checkWTime(); bool checkWCalendar(); bool checkWSystem(); bool checkWNetwork(); bool checkWCalculator(); bool checkWNotes(); bool checkWBattery(); public slots: void ShowWindow(QSystemTrayIcon::ActivationReason Reason); private slots: void showTime(); void coreBoxAbout(); void actionshow(); void on_corepad_clicked(); void on_screenshot_clicked(); void on_corepaint_clicked(); void on_corefm_clicked(); void on_start_clicked(); void on_search_clicked(); }; #endif // COREACTION_H
@saber Are the other two windows visible when you close coreaction?
See http://doc.qt.io/qt-5/qguiapplication.html#quitOnLastWindowClosed-prop
"If this property is true, the applications quits when the last visible primary window (i.e. window with no parent) is closed."
Also do you do anything special in closeEvent? -
@saber Are the other two windows visible when you close coreaction?
See http://doc.qt.io/qt-5/qguiapplication.html#quitOnLastWindowClosed-prop
"If this property is true, the applications quits when the last visible primary window (i.e. window with no parent) is closed."
Also do you do anything special in closeEvent?@jsulm
when i close the coreaction , the appliction output tab in qt creator shows exited with code 0. so that means other two window is also closed.i used that in the main file.you can see that main file in top of this topic.
yes .i every widow have a close event and that event collect the file path.
-
@jsulm
when i close the coreaction , the appliction output tab in qt creator shows exited with code 0. so that means other two window is also closed.i used that in the main file.you can see that main file in top of this topic.
yes .i every widow have a close event and that event collect the file path.
-
-
@mrjj
yes. i also tried by minimize corefm and start and then close the coreaction. same result.i just want to close all the window independently. close button will close ir's window,no other.
-
-
@mrjj
i read the link .and i also tried the setQuitOnLastWindowClosed(false); .sameso what can i do ?
@saber
Well, you must find out why.
Since doing thisint main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget a; a.show(); QWidget b; b.show(); QWidget c; c.show(); // MainWindow w; // w.show(); return app.exec(); }
Do not close at all. windows are stacked on top of each other.
So that means most likely that something in the project code does something.Use debugger and see what is going on. please breakpoint in any closeEvent for coreaction.
-
@saber
Well, you must find out why.
Since doing thisint main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget a; a.show(); QWidget b; b.show(); QWidget c; c.show(); // MainWindow w; // w.show(); return app.exec(); }
Do not close at all. windows are stacked on top of each other.
So that means most likely that something in the project code does something.Use debugger and see what is going on. please breakpoint in any closeEvent for coreaction.
-
@saber
Then set break point somewhere else :)
Like destructor.
Something must happen in code.
as default sample do NOT close all 3 windows.
and its very easy to see what is going on with the call stack so
you just need to beak it somewhere and see what is going on. -
@saber
Then set break point somewhere else :)
Like destructor.
Something must happen in code.
as default sample do NOT close all 3 windows.
and its very easy to see what is going on with the call stack so
you just need to beak it somewhere and see what is going on. -
@mrjj
ok . i try to debug.
but one thought in my mind.
i think window with tray icon with fremless is the cause?
also the close mathodQAction *QAquit=new QAction("&Quit",this); connect(QAquit, SIGNAL(triggered()),qApp,SLOT(close()));
@saber said in close one window close others:
connect(QAquit, SIGNAL(triggered()),qApp,SLOT(close()));
Didn't realise it's qApp there :-)
Sometimes it is something really small/simple and is hard to see.