为什么没有发出QCheckBox的信号

Why is the signal for the QCheckBox not emitted?

本文关键字:QCheckBox 信号 为什么      更新时间:2023-10-16

我正试图在我的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只是出于测试原因。但在调试时,我看到信号没有发出。我做错了什么?

您需要确保有很多东西:

  1. setupUi
  2. connect成功
  3. 复选框值确实已更改

首先,我不知道你在哪里叫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等),所以在这种情况下不需要信号槽,只需在单击"确定"按钮时检查复选框状态,并在接受功能中处理即可。在您的情况下,我认为复选框不是一个好的选择。