Qt5 将自定义窗口关闭信号连接到其他窗口
Qt5 Connect Custom WindowClose Signal To A Different Window
我正在尝试将一个类的信号连接到另一个类中的插槽,但是当我这样做时,我的应用程序在启动时崩溃。我在这里和Qt论坛上阅读了其他一些帖子,这些帖子未能连接自定义信号,但我认为我连接它们错了。任何帮助将不胜感激。
AdministrativeWindow.h
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();
};
管理窗口.cpp
void AdministrativeWindow::on_actionExit_Administrative_Window_triggered()
{
emit windowClose();
close();
}
主窗口.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
这样的混合概念(但是它可能存在,并且可以想象一些特殊情况,这可能有意义,我认为这里不是这种情况)
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- 当套接字连接断开时检测C/C++Unix
- 如何在Qt中连接来自不同窗口的两个对象?
- 在两个窗口中连接到相同的信号
- 在QT中的两个窗口之间共享websocket连接
- 连接 -> 窗口上没有这样的插槽
- 如何将信号从主窗口连接到对话框中的插槽
- 将工作线程信号与主窗口插槽 (Qt5) 连接时出错
- 窗口处于全屏模式时,QT连接不起作用
- 无法在C++中使用窗口的蓝牙 API 连接到蓝牙设备
- SDL视频显示窗口:如何连接窗口关闭事件回调
- OpenGL帧率:与窗口大小的连接
- QtQuick2 无法将应用程序窗口关闭信号连接到方法(C++新手)
- Qt5 将自定义窗口关闭信号连接到其他窗口
- 以编程方式在窗口中获取活动连接
- 渲染和窗口系统的独立性,通过窗口句柄进行连接
- GTK3如何将一个信号连接到多个窗口小部件
- 拦截/重定向窗口上的传出http连接
- QT 5 connect()函数连接textEditor和主窗口