[英]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.