Qt点击关闭按钮全部关闭
要实现点击Qt窗口的关闭按钮时,关闭所有打开的窗口,可以使用Qt的信号和槽机制。
首先,定义一个类来管理所有打开的窗口。在这个类中,创建一个列表来保存所有打开的窗口的指针。在窗口打开时,将其指针添加到列表中;在窗口关闭时,将其指针从列表中移除。
class WindowManager : public QObject
{
Q_OBJECT
public:
static WindowManager* instance();
void addWindow(QWidget* window);
void removeWindow(QWidget* window);
private:
static WindowManager* m_instance;
QList<QWidget*> m_windows;
WindowManager(QObject* parent = nullptr);
~WindowManager();
signals:
void allWindowsClosed();
private slots:
void onWindowClosed();
};
在实现文件中,需要定义一个静态的WindowManager实例,以便在整个应用程序中共享。
WindowManager* WindowManager::m_instance = nullptr;
WindowManager* WindowManager::instance()
{
if (!m_instance) {
m_instance = new WindowManager();
}
return m_instance;
}
void WindowManager::addWindow(QWidget* window)
{
m_windows.append(window);
connect(window, &QWidget::destroyed, this, &WindowManager::onWindowClosed);
}
void WindowManager::removeWindow(QWidget* window)
{
m_windows.removeOne(window);
if (m_windows.isEmpty()) {
emit allWindowsClosed();
}
}
WindowManager::WindowManager(QObject* parent)
: QObject(parent)
{
}
WindowManager::~WindowManager()
{
}
void WindowManager::onWindowClosed()
{
QWidget* window = qobject_cast<QWidget*>(sender());
removeWindow(window);
}
在主窗口类中,连接WindowManager::allWindowsClosed()信号到槽函数QApplication::quit(),以便在所有窗口关闭时退出应用程序。
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
// ...
connect(WindowManager::instance(), &WindowManager::allWindowsClosed, qApp, &QApplication::quit);
}
在打开新窗口时,将其指针传递给WindowManager::addWindow()函数。
void MainWindow::openNewWindow()
{
NewWindow* newWindow = new NewWindow(this);
newWindow->show();
WindowManager::instance()->addWindow(newWindow);
}
这样,当点击任何窗口的关闭按钮时,都会调用WindowManager::onWindowClosed()槽函数,从而移除该窗口的指针。当所有窗口都关闭时,WindowManager::allWindowsClosed()信号会被触发,从而退出应用程序。
原文地址: https://www.cveoy.top/t/topic/iwT9 著作权归作者所有。请勿转载和采集!