双击QWidget
QWidget with doubleclick
我希望能够双击 QPushbutton 而不是单击。
我尝试了什么:
connect(pb, SIGNAL(doubleClicked()), this, SLOT(comBtnPressed()));
错误说 "QObject::connect: No such signal QPushButton::doubleClicked()"
我最初选择了QPushButton,但出于我的目的,如果它可以产生双击事件,你可以建议更改为其他对象。不一定是按钮。
谢谢各位Qt和C++高手
一个简单的解决方案是创建我们自己的小部件,因此我们覆盖 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
如果你想在Qt Designer中使用它,你可以像下面这样推广link
。
然后连接:
//new style
connect(ui->widget, &DoubleClickedWidget::doubleClicked, this, &MainWindow::onDoubleClicked);
//old style
connect(ui->widget, SIGNAL(doubleClicked), this, SLOT(onDoubleClicked));
下面link有个例子
我希望能够双击 QPushbutton 而不是单击。
我尝试了什么:
connect(pb, SIGNAL(doubleClicked()), this, SLOT(comBtnPressed()));
错误说 "QObject::connect: No such signal QPushButton::doubleClicked()"
我最初选择了QPushButton,但出于我的目的,如果它可以产生双击事件,你可以建议更改为其他对象。不一定是按钮。
谢谢各位Qt和C++高手
一个简单的解决方案是创建我们自己的小部件,因此我们覆盖 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
如果你想在Qt Designer中使用它,你可以像下面这样推广link
。
然后连接:
//new style
connect(ui->widget, &DoubleClickedWidget::doubleClicked, this, &MainWindow::onDoubleClicked);
//old style
connect(ui->widget, SIGNAL(doubleClicked), this, SLOT(onDoubleClicked));
下面link有个例子