要实现点击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()信号会被触发,从而退出应用程序。

Qt点击关闭按钮全部关闭

原文地址: https://www.cveoy.top/t/topic/iwT9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录