当我按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();
}
我该如何解决?
答案 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 该事件应该被过滤,(即停止);否则它必须返回 假的。