Qt QButtonBox设置默认按钮

Qt QButtonBox设置默认按钮,qt,user-interface,Qt,User Interface,在Qt5.3下,QButtonBox的默认按钮是Cancel,我想将其设置为Ok,但我找不到实现它的方法。我试过这个: QPushButton * b = ui->buttonBox->button(QDialogButtonBox::Ok); b->setDefault(true); 但没有成功,它抛出: /Users/thomas/Dev/Joker/app/Joker/RulerSpaceDialog.cpp:18:3: error: member access int

在Qt5.3下,QButtonBox的默认按钮是
Cancel
,我想将其设置为
Ok
,但我找不到实现它的方法。我试过这个:

QPushButton * b = ui->buttonBox->button(QDialogButtonBox::Ok);
b->setDefault(true);
但没有成功,它抛出:

/Users/thomas/Dev/Joker/app/Joker/RulerSpaceDialog.cpp:18:3: error: member access into incomplete type 'QPushButton'
        b->setDefault(true);
         ^
/Applications/Qt/5.3/clang_64/lib/QtWidgets.framework/Versions/5/Headers/qdialog.h:50:7: note: forward declaration of 'QPushButton'
class QPushButton;
      ^
1 error generated.
我也尝试浏览列表,但没有运气

编辑: 我添加了include以获取该代码:

QPushButton * b = ui->buttonBox->button(QDialogButtonBox::Ok);
if(b)
{
    b->setDefault(true);
    qDebug() << b->text();
}
QPushButton*b=ui->buttonBox->button(QDialogButtonBox::Ok);
如果(b)
{
b->setDefault(true);
qDebug()文本();
}
输出
Ok
等待2秒,然后突出显示
Cancel
按钮…

确保您也设置了
false
,使用
setAutoDefault(false)
以及
setDefault(false)

下面是示例代码

#include <QtWidgets>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  QDialogButtonBox* bb = new QDialogButtonBox(
    QDialogButtonBox::Ok | QDialogButtonBox::Cancel);

  QPushButton* okBtn = bb->button(QDialogButtonBox::Ok);
  okBtn->setAutoDefault(true);
  okBtn->setDefault(true);

  QPushButton* caBtn = bb->button(QDialogButtonBox::Cancel);
  caBtn->setAutoDefault(false);
  caBtn->setDefault(false);

  QDialog dlg;
  QVBoxLayout* dlgLayout = new QVBoxLayout();
  dlgLayout->addWidget(bb);
  dlg.setLayout(dlgLayout);
  dlg.show();
  return app.exec();
}
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
QDialogButtonBox*bb=新QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
QPushButton*okBtn=bb->button(QDialogButtonBox::Ok);
okBtn->setAutoDefault(真);
okBtn->setDefault(真);
QPushButton*caBtn=bb->button(QDialogButtonBox::Cancel);
caBtn->setAutoDefault(假);
caBtn->setDefault(假);
QDialog-dlg;
QVBoxLayout*dlgLayout=新的QVBoxLayout();
dlgLayout->addWidget(bb);
dlg.setLayout(dlgLayout);
dlg.show();
返回app.exec();
}

当我在Windows上测试此功能时,OK按钮默认为默认按钮,但我可以通过将调用更改为
setAutoDefault
setDefault
,将其切换为cancel按钮。您的代码看起来是正确的。只需在头文件/源文件中包含
#包含
。@vahancho请参见编辑:)目前无法测试,但是否也需要关闭“取消”按钮的默认值,以避免有两个默认按钮?@A.E.Drew也不起作用。我理解正确吗?您只需要一个OK按钮吗?这几乎可以,我只是使用
okBtn->setFocus()添加了对OK按钮的关注