qt:: mouseDoubleClickEvent 在设置 ui 时不起作用

问题描述 投票:0回答:2

好的,所以代码很短,如下所示:

MainWindow::MainWindow() :
    QMainWindow(),
    ui(new Ui::MainWindow)
{
    //ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow:: mouseDoubleClickEvent ( QMouseEvent * event )
{
    cout << "being double clicked" << endl;
}

void MainWindow:: mousePressEvent(QMouseEvent *){
    cout << "being clicked once " << endl;
}

setupUi 被削减,在这种情况下输出很好,当我双击时,它显示“正在双击”消息。

但是,!!!当我设置用户界面时,它停止工作!该消息将不再显示...!!!

有人可以解释一下原因吗!非常感谢,这个很紧急!!!!!!!!!

qt mouseevent double-click
2个回答
2
投票

鼠标单击事件将始终发送到您单击的对象。这意味着如果您有例如一个横跨整个主窗口的按钮,然后双击该按钮,将调用

QPushButton::mouseDoubleClickEvent()
而不是主窗口中的事件。

如果您不想在子窗口小部件的子类中实现这些功能,或者您的子窗口小部件不提供类似

clicked()
信号之类的功能,您可以使用事件过滤器技术:

http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#installEventFilter


0
投票

我知道你的问题是十年前提出的。 我是一名考古学家,我已经成功地进行了挖掘;) - 这是一个笑话。

这对某些人来说可能很奇怪,但我认为回答未解答的问题是值得的,因为我一直在寻找问题的解决方案并自己解决了它。互联网上充斥着未解答的问题。

你的解决方案出现在搜索引擎中,因为我有完全相同的问题,实际上我已经解决了。

老实说,重新加载虚拟函数对我来说也不起作用。也许有更多知识的人可以评论为什么以下功能不想工作?

virtual void mouseDoubleClickEvent(QMouseEvent *event)
<- why doesn't this feature work?

仅重新加载虚拟函数才有效

virtual bool event(QEvent *event)

文件

mycalendarwidget.h

#define MYCALENDARWIDGET_H

#include <QCalendarWidget>
#include <QObject>
#include <QMouseEvent>

class MyCalendarWidget : public QCalendarWidget
{
    Q_OBJECT
public:
    MyCalendarWidget(QWidget *parent=nullptr);

    // QObject interface
public:
    virtual bool event(QEvent *event) override;

signals:
    void myClicked(bool checked=false);
};

#endif // MYCALENDARWIDGET_H

文件

mycalendarwidget.cpp


MyCalendarWidget::MyCalendarWidget(QWidget *parent) : QCalendarWidget(parent)
{
}

bool MyCalendarWidget::event(QEvent *event)
{
    if(event->type()==QEvent::MouseButtonRelease){
        emit myClicked(true);
        return true;
    }
    return false;
}

mainwindow.cpp

的某个地方
myCalendar = new MyCalendarWidget(this);
myCalendar->setGridVisible(false);

QObject::connect(myCalendar, &MyCalendarWidget::myClicked, this, [](){qInfo()<< "slot two mouse clicked";});

程序运行截图

© www.soinside.com 2019 - 2024. All rights reserved.