如何使QPushButton可按下输入键?

tot*_*dli 32 c++ qt qpushbutton

我想让我的应用笔记本电脑友好.我可以选择到任何地方,但如果我选择QPushButton我不能按Enter,只能用space.
有什么问题?如何使其可压Enter

tot*_*dli 65

TL;博士

  1. 在Qt Creator的UI视图中,选择要按下的按钮Enter.
  2. 在属性编辑器的右侧,向下滚动到标题为蓝色的部分QPushButton.
  3. 选中autoDefault或按复选框default.

物业编辑

大多数病例之间的主要不同autoDefault,并default是该按钮将如何呈现.但是有些情况下它会导致意想不到的事情,所以更多信息请参阅下文.


全面审查

概观

每个QPushButton都有3个不继承的属性.从这些开始,当我们在s 上放置按钮时,两个(defaultautoDefault)起主要作用QDialog,因为这些设置(以及其中一个按钮上的焦点)决定了我们按下时按下哪个按钮Enter.
默认情况下,所有这些属性都设置为false.autoDefault如果按钮具有QDialog父级,则只有预期才会成立.

每按一次space按钮,焦点就会被按下.以下将描述如果按下会发生什么Enter.

默认属性

如果设置为true,则该按钮将是默认按钮.
如果Enter在对话框上按下,则按下此按钮,除非焦点位于autoDefault按钮上.

应该只有一个默认按钮.如果添加更多,则添加的最后一个将是默认按钮.

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.

OS渲染按钮

官方文件

大部分答案都是根据官方文件做出的.Qt制作
QPushButton文档说明了这些:

默认和自动默认按钮决定用户在对话框中按Enter键时会发生什么.

当用户按下回车键时,将自动按下此属性设置为true的按钮(即对话框的默认按钮),但有一个例外:如果autoDefault按钮当前具有焦点,则按下autoDefault按钮.当对话框具有自动默认按钮但没有默认按钮时,按Enter键将按下当前具有焦点的autoDefault按钮,或者如果没有按钮具有焦点,则按下焦点链中的下一个autoDefault按钮.

在对话框中,一次只有一个按钮可以是默认按钮.然后,此按钮显示一个附加帧(取决于GUI样式).

默认按钮行为仅在对话框中提供.当按钮具有焦点时,可以通过按空格键始终从键盘单击按钮.

如果在对话框可见时在当前默认按钮上将default属性设置为false,则下次对话框中的按钮获得焦点时将自动分配新的默认值.

检查QDialogQMessageBox也是值得的.