QButtonBox设置默认按钮

Tho*_*oub 6 user-interface qt

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

QPushButton * b = ui->buttonBox->button(QDialogButtonBox::Ok);
b->setDefault(true);
Run Code Online (Sandbox Code Playgroud)

但没有成功,它会引发:

/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.
Run Code Online (Sandbox Code Playgroud)

我也尝试浏览列表,但没有运气....

编辑:

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

QPushButton * b = ui->buttonBox->button(QDialogButtonBox::Ok);
if(b)
{
    b->setDefault(true);
    qDebug() << b->text();
}
Run Code Online (Sandbox Code Playgroud)

哪些输出Ok等待2秒然后突出显示Cancel按钮...

Sil*_*ker 6

确保还设置了自动默认设置 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();
}
Run Code Online (Sandbox Code Playgroud)

当我在Windows上测试此按钮时,默认情况下,“确定”按钮是默认按钮,但是我可以通过更改对setAutoDefault和的调用将其交换为“取消”按钮setDefault