簡體   English   中英

Qt5連接自定義窗口關閉信號到另一個窗口

[英]Qt5 Connect Custom WindowClose Signal To A Different Window

我試圖將信號從一個類連接到另一個類的插槽,但是當我這樣做時,我的應用程序在啟動時崩潰。 我在這里和Qt論壇上還閱讀了其他一些文章,這些文章都沒有像這樣連接自定義信號,但我認為我將它們連接錯了。 任何幫助是極大的贊賞。

管理窗口

class AdministrativeWindow : public QMainWindow
{
    Q_OBJECT

    public:
        explicit AdministrativeWindow(QWidget *parent = 0);
        ~AdministrativeWindow();

    private slots:
        void on_actionExit_Administrative_Window_triggered();

    private:
        Ui::AdministrativeWindow *ui;

    signals:
        void windowClose();
};

AdministrativeWindow.cpp

void AdministrativeWindow::on_actionExit_Administrative_Window_triggered()
{
    emit windowClose();
    close();
}

MainWindow.cpp

connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));

void MainWindow::on_ConfigureUsersBtn_clicked()
{
    if(adminWindow == NULL)
    {
        adminWindow = new AdministrativeWindow();
        adminWindow->show();
    }
    else if(adminWindow->isVisible())
    {
        adminWindow->activateWindow();
        adminWindow->showNormal();
    }
    else
    {
        adminWindow->show();
    }
}

void MainWindow::on_adminWindowClose()
{
    delete adminWindow;
    adminWindow = NULL;
}

您需要確保在連接時使用有效的adminWindow指針:

void MainWindow::on_ConfigureUsersBtn_clicked()
{
    if(adminWindow == NULL)
    {
        adminWindow = new AdministrativeWindow();
        connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));
        adminWindow->show();
    }

確保在初始化指針后進行連接

connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));
           ^
        valid ptr

如果稱為常規成員函數,則專用插槽也是專用的,但對於連接始終是公用的。 我認為這是一種更干凈的設計,可以將插槽定義為公共插槽,因為它們的用途是通信,並在需要它們時照常使用私有功能,除非您確實需要諸如混合private slot類的混合概念(但是它可能存在,並且人們可以想象其中的一些特殊情況)這可能是有道理的,我認為這里不是這種情況)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM