双击 QWidget

Gen*_*ode 2 c++ qt qt-signals qt5 qt-slot

我希望能够双击 QPushbutton 而不是单击。

我试过的:

connect(pb, SIGNAL(doubleClicked()), this, SLOT(comBtnPressed()));
Run Code Online (Sandbox Code Playgroud)

错误说“QObject::connect: No such signal QPushButton::doubleClicked()”

我最初选择了 QPushButton,但出于我的目的,如果它可以进行双击事件,您可以建议更改其他对象。不一定是按钮。

感谢 Qt 和 C++ 大师。

eyl*_*esc 5

一个简单的解决方案是创建我们自己的小部件,以便我们覆盖 mouseDoubleClickEvent 方法,并且您可以覆盖paintEvent 来绘制小部件:

#ifndef DOUBLECLICKEDWIDGET_H
#define DOUBLECLICKEDWIDGET_H

#include <QWidget>
#include <QPainter>

class DoubleClickedWidget : public QWidget
{
    Q_OBJECT
public:
    explicit DoubleClickedWidget(QWidget *parent = nullptr):QWidget(parent){
        setFixedSize(20, 20);
    }

signals:
    void doubleClicked();
protected:
    void mouseDoubleClickEvent(QMouseEvent *){
        emit doubleClicked();
    }
    void paintEvent(QPaintEvent *){
        QPainter painter(this);
        painter.fillRect(rect(), Qt::green);
    }
};

#endif // DOUBLECLICKEDWIDGET_H
Run Code Online (Sandbox Code Playgroud)

如果您想将它与 Qt Designer 一起使用,您可以按如下所示进行升级link

然后连接:

//new style
connect(ui->widget, &DoubleClickedWidget::doubleClicked, this, &MainWindow::onDoubleClicked);
//old style
connect(ui->widget, SIGNAL(doubleClicked), this, SLOT(onDoubleClicked));
Run Code Online (Sandbox Code Playgroud)

在下面的链接中有一个例子。