QDialogButtonBox的信号触发

环境

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);