输入SpinBox时单击默认QPushButton

时间:2014-11-28 17:56:30

标签: c++ qt button click default

当我按QPushButton上的Enter键(实际上在每个输入框上)时,我需要提高QSpinBox的点击信号,但即使我的按钮是默认按钮,下面的代码也没有工作。

#include <QApplication>
#include <QHBoxLayout>
#include <QPushButton>
#include <QSpinBox>
#include <QMessageBox>

int main(int argc, char* argv[])
{
  QApplication app(argc, argv);

  QWidget* window = new QWidget();

  QSpinBox* spinbox = new QSpinBox();
  QPushButton* button = new QPushButton("Ok");
  button->setDefault(true);

  QObject::connect(button, &QPushButton::clicked, []()
  { 
    QMessageBox::question(nullptr, "Test", "Quit?", QMessageBox::Yes|QMessageBox::No);
  });

  QHBoxLayout* layout = new QHBoxLayout();
  layout->addWidget(spinbox);
  layout->addWidget(button);
  window->setLayout(layout);
  window->show();

  return app.exec();
}

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您可以在Qt文档中看到QPushButton

  

默认按钮行为仅在对话框中提供

您正在使用QWidget并期望默认按钮行为起作用。只需使用QDialog代替QWidget

QDialog * window = new QDialog();
...

答案 1 :(得分:0)

您可以使用Event

  

QObject::installEventFilter()功能通过设置启用此功能   事件过滤器,使指定的过滤器对象接收   其QObject::eventFilter()函数中目标对象的事件。一个   事件过滤器在目标对象之前处理事件,   允许它根据需要检查和丢弃事件。

void QObject::installEventFilter ( QObject * filterObj )

在此对象上安装事件过滤器filterObj。例如:

 monitoredObj->installEventFilter(filterObj);
  

事件过滤器是一个接收发送到的所有事件的对象   这个对象。过滤器可以停止事件或转发事件   这个对象。事件过滤器filterObj通过它接收事件   eventFilter()函数。 eventFilter()函数必须返回true   该事件应该被过滤,(即停止);否则它必须返回   假的。