在Qt 5.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();
}
哪个输出Ok
等待2秒然后突出显示Cancel
按钮...
答案 0 :(得分:6)
请务必同时设置auto default 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();
}
当我在Windows上测试时,默认情况下,“确定”按钮是默认按钮,但我可以通过将呼叫更改为setAutoDefault
和setDefault
来将其切换到取消按钮。