ubuntu + Qt 4.7
键盘按下Enter键时,会触发QDialogButtonBox的clicked信号;
如下图,在设计师界面拖出两个控件,一个QLineEdit,一个QDialogButtonBox。此时可以注意到buttonBox上的确定按钮为橙色。
在cpp中加入代码:
关联buttonBox的clicked信号,在槽函数中进行打印。
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
this->setFocusPolicy(Qt::NoFocus);
ui->buttonBox->clearFocus();
ui->buttonBox->setFocusPolicy(Qt::NoFocus);
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*)));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::buttonClicked(QAbstractButton *button)
{
if(button == (QAbstractButton *)(ui->buttonBox->button(QDialogButtonBox::Ok)))
{
qDebug() << "(Button OK has been clicked.)";
}
else if(button == (QAbstractButton *)(ui->buttonBox->button(QDialogButtonBox::Cancel)))
{
qDebug() << "(Button Cancle has been clicked.)";
}
}
实际测试发现:
1. 程勋运行时,QLineEdit的光标是闪烁的,此时可以直接输入数据;
2. 但是按下键盘Enter键时,出现了如下打印:
1. Enter键为什么会触发这种信号?
2. 有什么方法可以去掉QDialogButtonBox的默认聚焦的按钮吗?
1.因为QDialogButtonBox的ok按钮是默认按钮,因此具有焦点,enter以后就会触发响应操作。就好像点击一个电脑图标,单击enter键以后就会打开。
2.
设置焦点状态为无焦点即可。
ui->buttonBox->setFocusPolicy(Qt::NoFocus);