为什么没有发出QCheckBox的信号
Why is the signal for the QCheckBox not emitted?
我正试图在我的UI中插入一个复选框,该复选框可以根据另一个类的检查状态设置布尔变量true或false。问题是没有发出信号。
变量在我的第一个类(renderarea.h)的头文件中定义为
public:布尔选择模式插槽在第二类的头文件中定义为无效
受保护的插槽:void setSelectionMode(布尔模式);信号连接到构造函数中我的第二类源文件中的插槽,如下所示:
PaintWidget::PaintWidget(QWidget*父级):QWidget(父),ui(新ui::PaintWidget){connect(ui->selectionModeCheckBox,SIGNAL(切换(bool)),this,SLOT(setSelectionMode(bool));}void PaintWidget::setSelectionMode(布尔模式){ui->displayWidget->selectionMode=mode;Q消息框消息框;if(ui->displayWidget->selectionMode==true)msgbox.setText("选择模式为true");其他的msgbox.setText("选择模式为false");}我在这里使用QMessageBox只是出于测试原因。但在调试时,我看到信号没有发出。我做错了什么?
您需要确保有很多东西:
setupUi
connect
成功- 复选框值确实已更改
首先,我不知道你在哪里叫setupUi
。您将希望在构造函数中执行此操作:
PaintWidget::PaintWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::PaintWidget)
{
ui->setupUi(this);
connect(ui->selectionModeCheckBox,
SIGNAL(toggled(bool)), this, SLOT(setSelectionMode(bool)));
}
其次,确保connect的返回值表明它成功了。
第三,我认为你是手动点击复选框,但为了测试起见,你可以在你的构造函数中连接之后这样做
ui->selectionModeCheckBox->setChecked(true);
只是澄清一下,当你说slot在头文件中时,你的意思是在slots之后:label,对吧?
您应该使用stateChanged()信号,该信号由复选框在其状态更改时发出。它给你一个整数,因为复选框也可以是三态的(但在你的情况下,你可以把这个int值用作布尔值)。
嗯,我经常在对话框中使用复选框(settingDialog、selectionDialog等),所以在这种情况下不需要信号槽,只需在单击"确定"按钮时检查复选框状态,并在接受功能中处理即可。在您的情况下,我认为复选框不是一个好的选择。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- Qt将信号与另一个类方法连接
- 仅在选中 QCheckBox 时发出信号
- Qt - QCheckBox不发出stateChanged(int state)信号
- 为什么没有发出QCheckBox的信号