我试图在我的UI中插入一个复选框,可以根据其检查状态从另一个类设置一个布尔变量true或false . 问题是没有发出信号 .
该变量在我的第一个类(renderarea.h)的头文件中定义为
public:
bool selectionMode;
插槽在第二类的头文件中定义为void
protected slots:
void setSelectionMode(bool mode);
并且信号连接到构造函数中我的第二类源文件中的插槽,如下所示:
PaintWidget::PaintWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::PaintWidget)
{
connect(ui->selectionModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(setSelectionMode(bool)));
}
void PaintWidget::setSelectionMode(bool mode)
{
ui->displayWidget->selectionMode = mode;
QMessageBox msgbox;
if (ui->displayWidget->selectionMode == true)
msgbox.setText("selection mode is true");
else
msgbox.setText("selection mode is false");
}
我在这里使用QMessageBox只是出于测试原因 . 但是在调试时我发现信号没有发出 . 我究竟做错了什么?
4 回答
你需要确保有很多东西到位:
setupUi
connect
成功了复选框值确实已更改
首先,我看不到你在哪里叫
setupUi
. 你想在构造函数中这样做:其次,确保connect的返回值表示它成功 .
第三,我假设您手动单击复选框,但为了测试,您可以在构造函数中连接后执行此操作:
只是澄清一下,当你说插槽位于头文件中时,你的意思是在插槽之后:标签,对吧?
您应该在状态发生变化时使用复选框发出的stateChanged()信号 . 它给你一个整数,因为复选框也可以是三态(但你可以在你的情况下使用该int值作为布尔值) .
好吧,我经常使用Dialog中的复选框(settingDialog,selectionDialog等),所以在这种情况下不需要信号槽,只需在点击“确定”按钮时检查复选框状态,并在接受中处理它在你的情况下,我认为复选框不是一个好选择 .