tot*_*dli 32 c++ qt qpushbutton
我想让我的应用笔记本电脑友好.我可以选择到任何地方,但如果我选择QPushButton我不能按Enter,只能用space.
有什么问题?如何使其可压Enter?
tot*_*dli 65
QPushButton.autoDefault或按复选框default.
大多数病例之间的主要不同autoDefault,并default是该按钮将如何呈现.但是有些情况下它会导致意想不到的事情,所以更多信息请参阅下文.
每个QPushButton都有3个不继承的属性.从这些开始,当我们在s 上放置按钮时,两个(default和autoDefault)起主要作用QDialog,因为这些设置(以及其中一个按钮上的焦点)决定了我们按下时按下哪个按钮Enter.
默认情况下,所有这些属性都设置为false.autoDefault如果按钮具有QDialog父级,则只有预期才会成立.
每按一次space按钮,焦点就会被按下.以下将描述如果按下会发生什么Enter.
如果设置为true,则该按钮将是默认按钮.
如果Enter在对话框上按下,则按下此按钮,除非焦点位于autoDefault按钮上.
应该只有一个默认按钮.如果添加更多,则添加的最后一个将是默认按钮.
如果设置为true,则该按钮将是autoDefault按钮.
如果Enter在对话框上按下,则如果焦点在其上,则按下此按钮.
如果焦点不在autoDefault按钮上,并且没有默认按钮,则按下下一个autoDefault按钮Enter.
如果设置为true,则不会引发按钮的边框.
下表显示了在不同焦点上使用不同按钮按下哪个按钮.按钮从左到右添加.


以下代码是一种向对话框添加按钮的方法.它可以通过更改和/或更改boolean值来用于测试.
您只需要创建一个窗口,添加一个被调用者和一个被调用者(这是默认命名).别忘了.然后将此代码复制到按钮的信号:setDefault()setAutoDefault()QPushButtonpushButtonQLabellabel#include <QMessageBox>clicked()
void MainWindow::on_pushButton_clicked()
{
QMessageBox msgBox;
QPushButton button("Button");
button.setDefault(false);
button.setAutoDefault(false);
msgBox.addButton(&button, QMessageBox::ActionRole);
QPushButton autodefaultbutton("AutoDefault Button");
autodefaultbutton.setDefault(false);
autodefaultbutton.setAutoDefault(true);
msgBox.addButton(&autodefaultbutton, QMessageBox::ActionRole);
QPushButton autodefaultbutton2("AutoDefault Button2");
autodefaultbutton2.setDefault(false);
autodefaultbutton2.setAutoDefault(true);
msgBox.addButton(&autodefaultbutton2, QMessageBox::ActionRole);
QPushButton defaultbutton("Default Button");
defaultbutton.setDefault(true);
defaultbutton.setAutoDefault(false);
msgBox.addButton(&defaultbutton, QMessageBox::ActionRole);
msgBox.exec();
if (msgBox.clickedButton() == &button) {
ui->label->setText("Button");
} else if (msgBox.clickedButton() == &defaultbutton) {
ui->label->setText("Default Button");
} else if (msgBox.clickedButton() == &autodefaultbutton) {
ui->label->setText("AutoDefault Button");
} else if (msgBox.clickedButton() == &autodefaultbutton2) {
ui->label->setText("AutoDefault Button2");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您编译代码,您可以获得此窗口.您甚至不必单击按钮,因为操作系统呈现它们的方式显示如果您点击Enter或按下哪一个按钮space.

大部分答案都是根据官方文件做出的.Qt制作
的QPushButton文档说明了这些:
默认和自动默认按钮决定用户在对话框中按Enter键时会发生什么.
当用户按下回车键时,将自动按下此属性设置为true的按钮(即对话框的默认按钮),但有一个例外:如果autoDefault按钮当前具有焦点,则按下autoDefault按钮.当对话框具有自动默认按钮但没有默认按钮时,按Enter键将按下当前具有焦点的autoDefault按钮,或者如果没有按钮具有焦点,则按下焦点链中的下一个autoDefault按钮.
在对话框中,一次只有一个按钮可以是默认按钮.然后,此按钮显示一个附加帧(取决于GUI样式).
默认按钮行为仅在对话框中提供.当按钮具有焦点时,可以通过按空格键始终从键盘单击按钮.
如果在对话框可见时在当前默认按钮上将default属性设置为false,则下次对话框中的按钮获得焦点时将自动分配新的默认值.
检查QDialog和QMessageBox也是值得的.