如何使一个QPushButton可按压的输入键?(How to make a QPushButton

2019-06-26 21:50发布

我要让我的应用程序的笔记本电脑友好。 我可以选项卡随处可见,但如果我标签到QPushButton我不能按它进入 ,只能用空间
有什么问题? 如何使它可按压的输入

Answer 1:

TL;博士

  1. 在Qt Creator中的UI视图中,选择你想为可挤压输入按钮。
  2. 在右侧的属性编辑器向下滚动到标题为蓝色部分QPushButton
  3. 检查该复选框autoDefaultdefault

大多数病例之间的主要不同autoDefault并且default是该按钮将如何呈现。 但也有情况下,它可能会导致意想不到的事情,所以更多阅读下面的详细信息。


全回顾

概观

每一个QPushButton有没有继承3个属性。 从这两个( defaultautoDefault )有重大作用,当我们把上的按钮QDialog S,因为这些设置(对焦按钮中的一个)决定,如果我们敲回车哪个按钮被按下。
所有这些属性都设置默认为false。 只有厚望是autoDefault如果按钮有一个,这将是真正的QDialog父母。

每次按下空格键为重点,它的时间将被压。 下面将描述如果按Enter键会发生什么。

默认属性

如果设置为true,按钮将是一个默认的按钮
如果按Enter键对话框上,比这个按钮被按下时,除重点是一个autoDefault按钮。

目前应该只有一个默认按钮。 如果你添加更多的则是最后一个加入将成为默认按钮。

AutoDefault财产

如果设置为true,按钮将是一个autoDefault按钮
如果按Enter键对话框上,比如果重点是它这个按钮被按下。

如果重点是不是一个autoDefault按钮并没有默认按钮比下autoDefault按钮将被按下Enter键

平属性

如果设置为true,则该按钮的边框将不会引发。

示例表

下表显示哪个按钮将与在不同的焦点不同的按钮被按下。 将按钮添加从左边到右边。

测试代码

下面的代码是将按钮添加到对话的方式。 它可以通过改变用于测试boolean在值setDefault()和/或setAutoDefault()
你只需要创建一个窗口,增加一个QPushButton称为pushButtonQLabel称为label (这是默认的命名)。 不要忘了#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");
   }
}

显示

如果您编译代码,你可以得到这个窗口。 你甚至没有,因为他们的方式是由OS显示哪,如果你按下回车键空格一个将被压渲染到点击的按钮。

正式文件

大多数这个答案是根据官方文档制作。
该QPushButton文档被Qt做出规定这些:

默认和autodefault按钮决定当用户按下在对话框中输入发生了什么。

如果autoDefault按钮当前具有焦点时,autoDefault按下按钮:这个属性设置为true(即对话框的默认按钮)会自动在用户按下输入压,但有一个例外的按钮。 当对话框中有autoDefault按钮,但没有默认按钮,按下Enter键将则按当前具有焦点,如果没有按钮具有焦点autoDefault按钮,在焦点链的下一个autoDefault按钮。

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

默认按钮行为仅在对话中提出的。 按钮总是可以通过按空格键,当按钮具有焦点从键盘点击。

如果默认属性设置为false,当前的默认按钮,对话框是可见的,一个新的默认将自动在下一次对话框中的按钮接收焦点分配。

另外值得一检查QDialog的和QMessageBox提示 。



Answer 2:

据Qt的文档请输入应该工作

在对话框的命令按钮,默认情况下自动默认按钮,即它们将自动成为默认的按钮,当他们收到的键盘输入焦点。 默认的按钮是一个按钮,当用户按下在对话框的Enter键或Return键时被激活。 你可以用setAutoDefault改变这种()。

http://qt-project.org/doc/qt-4.8/qpushbutton.html



Answer 3:

totymedli的答案是伟大的。 我添加了一个小程序来测试ISDEFAULT,autoDefault,setDefault和setAutoDefault功能的各种组合。

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Window(QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        autoDefaultInitialState = True
        defaultInitialState = False

        self.lineEdit1 = QLineEdit(self)
        self.lineEdit2 = QLineEdit(self)
        self.lineEdit3 = QLineEdit(self)

        # if we create a new button (e.g. "Print state"), with the same function,
        # it doesn't work, because adding a new button (apart from our 3 buttons)
        # produces total mess, so we use this lineedit for this purpose
        self.lineEdit1.returnPressed.connect(self.printState)

        #------------------------------------

        self.chkAutoDefaultOk = QCheckBox('OK setAutoDefault', self)
        self.chkAutoDefaultCancel = QCheckBox('Cancel setAutoDefault', self)
        self.chkAutoDefaultApply = QCheckBox('Apply setAutoDefault', self)

        self.chkDefaultOk = QCheckBox('OK setDefault', self)
        self.chkDefaultCancel = QCheckBox('Cancel setDefault', self)
        self.chkDefaultApply = QCheckBox('Apply setDefault', self)

        self.chkAutoDefaultOk.setChecked(autoDefaultInitialState)
        self.chkAutoDefaultCancel.setChecked(autoDefaultInitialState)
        self.chkAutoDefaultApply.setChecked(autoDefaultInitialState)

        self.chkDefaultOk.setChecked(defaultInitialState)
        self.chkDefaultCancel.setChecked(defaultInitialState)
        self.chkDefaultApply.setChecked(defaultInitialState)

        #------------------------------------

        self.pushButtonOk = QPushButton(self)
        self.pushButtonOk.setText("Ok")
        self.pushButtonOk.clicked.connect(lambda : print('ok'))

        self.pushButtonCancel = QPushButton(self)
        self.pushButtonCancel.setText("Cancel")
        self.pushButtonCancel.clicked.connect(lambda : print('cancel'))

        self.pushButtonApply = QPushButton(self)
        self.pushButtonApply.setText("Apply")
        self.pushButtonApply.clicked.connect(lambda : print('apply'))

        #------------------------------------

        self.pushButtonOk.setAutoDefault(autoDefaultInitialState)
        self.pushButtonCancel.setAutoDefault(autoDefaultInitialState)
        self.pushButtonApply.setAutoDefault(autoDefaultInitialState)

        self.pushButtonOk.setDefault(defaultInitialState)
        self.pushButtonCancel.setDefault(defaultInitialState)
        self.pushButtonApply.setDefault(defaultInitialState)

        #------------------------------------

        self.chkAutoDefaultOk.stateChanged.connect(self.chkChangeState)
        self.chkAutoDefaultCancel.stateChanged.connect(self.chkChangeState)
        self.chkAutoDefaultApply.stateChanged.connect(self.chkChangeState)

        self.chkDefaultOk.stateChanged.connect(self.chkChangeState)
        self.chkDefaultCancel.stateChanged.connect(self.chkChangeState)
        self.chkDefaultApply.stateChanged.connect(self.chkChangeState)

        #------------------------------------

        self.layout = QGridLayout(self)
        self.layout.addWidget(self.lineEdit1, 0, 0, 1, 3)
        self.layout.addWidget(self.lineEdit2, 1, 0, 1, 3)
        self.layout.addWidget(self.lineEdit3, 2, 0, 1, 3)

        self.layout.addWidget(self.chkAutoDefaultOk, 3, 0)
        self.layout.addWidget(self.chkAutoDefaultCancel, 3, 1)
        self.layout.addWidget(self.chkAutoDefaultApply, 3, 2)

        self.layout.addWidget(self.chkDefaultOk, 4, 0)
        self.layout.addWidget(self.chkDefaultCancel, 4, 1)
        self.layout.addWidget(self.chkDefaultApply, 4, 2)

        self.layout.addWidget(self.pushButtonOk, 5, 0)
        self.layout.addWidget(self.pushButtonCancel, 5, 1)
        self.layout.addWidget(self.pushButtonApply, 5, 2)

    def chkChangeState(self):
        obj = self.sender()
        if (obj == self.chkAutoDefaultOk):
            self.pushButtonOk.setAutoDefault(self.chkAutoDefaultOk.isChecked())
        elif (obj == self.chkAutoDefaultCancel):
            self.pushButtonCancel.setAutoDefault(self.chkAutoDefaultCancel.isChecked())
        elif (obj == self.chkAutoDefaultApply):
            self.pushButtonApply.setAutoDefault(self.chkAutoDefaultApply.isChecked())
        elif (obj == self.chkDefaultOk):
            self.pushButtonOk.setDefault(self.chkDefaultOk.isChecked())
        elif (obj == self.chkDefaultCancel):
            self.pushButtonCancel.setDefault(self.chkDefaultCancel.isChecked())
        elif (obj == self.chkDefaultApply):
            #print('sender: self.chkDefaultApply')
            #print('before: ', self.pushButtonApply.isDefault())
            self.pushButtonApply.setDefault(self.chkDefaultApply.isChecked())
            #print('after: ', self.pushButtonApply.isDefault())

    def printState(self):
        print(self.pushButtonOk.autoDefault(), self.pushButtonCancel.autoDefault(), self.pushButtonApply.autoDefault())
        print(self.pushButtonOk.isDefault(), self.pushButtonCancel.isDefault(), self.pushButtonApply.isDefault())
        print('-' * 50)

app = QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())


Answer 4:

为您的小部件的标签顺序。 这将允许单击回车键的用法。 它在那里由内而外的Qt默认。



文章来源: How to make a QPushButton pressable for enter key?