我要让我的应用程序的笔记本电脑友好。 我可以选项卡随处可见,但如果我标签到QPushButton我不能按它进入 ,只能用空间 。
有什么问题? 如何使它可按压的输入 ?
Answer 1:
TL;博士
- 在Qt Creator中的UI视图中,选择你想为可挤压输入按钮。
- 在右侧的属性编辑器向下滚动到标题为蓝色部分
QPushButton
。 - 检查该复选框
autoDefault
或default
。
大多数病例之间的主要不同autoDefault
并且default
是该按钮将如何呈现。 但也有情况下,它可能会导致意想不到的事情,所以更多阅读下面的详细信息。
全回顾
概观
每一个QPushButton
有没有继承3个属性。 从这两个( default
和autoDefault
)有重大作用,当我们把上的按钮QDialog
S,因为这些设置(对焦按钮中的一个)决定,如果我们敲回车哪个按钮被按下。
所有这些属性都设置默认为false。 只有厚望是autoDefault
如果按钮有一个,这将是真正的QDialog
父母。
每次按下空格键为重点,它的时间将被压。 下面将描述如果按Enter键会发生什么。
默认属性
如果设置为true,按钮将是一个默认的按钮 。
如果按Enter键对话框上,比这个按钮被按下时,除重点是一个autoDefault按钮。
目前应该只有一个默认按钮。 如果你添加更多的则是最后一个加入将成为默认按钮。
AutoDefault财产
如果设置为true,按钮将是一个autoDefault按钮 。
如果按Enter键对话框上,比如果重点是它这个按钮被按下。
如果重点是不是一个autoDefault按钮并没有默认按钮比下autoDefault按钮将被按下Enter键 。
平属性
如果设置为true,则该按钮的边框将不会引发。
示例表
下表显示哪个按钮将与在不同的焦点不同的按钮被按下。 将按钮添加从左边到右边。
测试代码
下面的代码是将按钮添加到对话的方式。 它可以通过改变用于测试boolean
在值setDefault()
和/或setAutoDefault()
你只需要创建一个窗口,增加一个QPushButton
称为pushButton
和QLabel
称为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默认。