Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从QWidgetAction访问QCheckBox 请考虑贝娄代码: QMenu* menu_ = new QMenu(this); QWidgetAction *checkableAction = new QWidgetAction(menu_); QCheckBox* checkBox1 = new QCheckBox("Sample1", menu_); QCheckBox* checkBox2 = new QCheckBox("Sample2", menu_); checkableAction->setDefaultWidget(checkBox1); checkableAction->setDefaultWidget(checkBox2); connect(checkableAction, &QWidgetAction::toggled, this, &MenuPushButton::onRec_triggered);_C++_Qt - Fatal编程技术网

C++ 从QWidgetAction访问QCheckBox 请考虑贝娄代码: QMenu* menu_ = new QMenu(this); QWidgetAction *checkableAction = new QWidgetAction(menu_); QCheckBox* checkBox1 = new QCheckBox("Sample1", menu_); QCheckBox* checkBox2 = new QCheckBox("Sample2", menu_); checkableAction->setDefaultWidget(checkBox1); checkableAction->setDefaultWidget(checkBox2); connect(checkableAction, &QWidgetAction::toggled, this, &MenuPushButton::onRec_triggered);

C++ 从QWidgetAction访问QCheckBox 请考虑贝娄代码: QMenu* menu_ = new QMenu(this); QWidgetAction *checkableAction = new QWidgetAction(menu_); QCheckBox* checkBox1 = new QCheckBox("Sample1", menu_); QCheckBox* checkBox2 = new QCheckBox("Sample2", menu_); checkableAction->setDefaultWidget(checkBox1); checkableAction->setDefaultWidget(checkBox2); connect(checkableAction, &QWidgetAction::toggled, this, &MenuPushButton::onRec_triggered);,c++,qt,C++,Qt,如何从onRec\u-triggered插槽中的QWidgetAction访问QCheckBox功能。我尝试下面的代码,但它不适合我 void MenuPushButton::onRec_triggered() { for(QAction* action : menu_->actions()) if(dynamic_cast<QCheckBox*>(action)->isChecked()) qDebug()<<

如何从
onRec\u-triggered
插槽中的QWidgetAction访问QCheckBox功能。我尝试下面的代码,但它不适合我

void MenuPushButton::onRec_triggered()
{
    for(QAction* action : menu_->actions())
        if(dynamic_cast<QCheckBox*>(action)->isChecked())
            qDebug()<<dynamic_cast<QCheckBox*>(action)->text();
}
void菜单按钮::onRec_触发()
{
对于(QAction*操作:菜单->操作())
if(动态施法(动作)->isChecked())

qDebug()此答案基于问题提供的代码片段。但是我不确定其目的是否是使用基类
QAction
的“可检查”功能

如果要使用设置为
QWidgetAction
default小部件的复选框来触发插槽,则必须使用
connect(复选框2,&QCheckBox::toggled,this,&MenuPushButton::onRec_trigged)
。您可以删除
checkBox1
,因为它被
checkBox2
作为默认小部件覆盖。在插槽中,您必须使用两步
dynamic\u cast
。首先
dynamic\u cast
检查
action
类型是否为
QWidgetAction*
并且如果与之匹配,请调用
defaultWidget()
并尝试将
dynamic\u cast
结果转换为
QCheckBox*
。如果这也匹配,则调用
text()
方法。在调用任何方法之前,始终检查
dynamic\u cast
的结果,以避免访问
nullptr

void MenuPushButton::onRec_triggered()
{
    for(QAction* action : menu_->actions()) {
        QWidgetAction *wa = dynamic_cast<QWidgetAction*>(action);
        if (wa) {
            QCheckBox *cb = dynamic_cast<QCheckBox*>(wa->defaultWidget());
            if (cb) {
                qDebug() << cb->text();
            }
        }
    }
}
void菜单按钮::onRec_触发()
{
对于(QAction*操作:菜单->操作()){
QWidgetAction*wa=动态施法(动作);
如果(佤邦){
QCheckBox*cb=dynamic_cast(wa->defaultWidget());
如果(cb){
qDebug()文本();
}
}
}
}