我创建了一个非常简单的Qt项目,其中包含两个类。其中之一是重新实现的小部件,具有以下方法:
#include "mywidget.h"
// Qt
#include <QMouseEvent>
#include <QMessageBox>
// Debug
#include <QDebug>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
}
void MyWidget::mousePressEvent(QMouseEvent *event)
{
QMessageBox::information(this, "", "");
}
另一个类是主类,它具有以下方法:
#include "mainwindow.h"
// My headers
#include "mywidget.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
this->setCentralWidget(new QWidget());
QWidget *mw = new MyWidget(this->centralWidget());
// setting backgrounds for visibility
mw->setPalette( QPalette(Qt::green) );
mw->setAutoFillBackground(true);
mw->move(20, 20);
mw->resize(50, 50);
}
MainWindow::~MainWindow()
{
}
非常简单。在主窗口中只能找到一个小部件。当按下鼠标按钮时,此小部件会创建一个消息框。当消息框出现后,如果我用左键单击“确定”按钮,则一切正常,但是如果我按下“空格键”或“回车键”来激活按钮,则程序会变得疯狂:如果我单击任何地方(无论是在小部件区域内还是外部),绿色小部件都会像我单击了它一样,并弹出消息框。
为什么会这样?我该如何抑制这种行为?
QWidget *mw = new MyWidget; setCentralWidget(mw);
- vahancho