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()文本();
}
}
}
}