实现思路:利用事件过滤器实现按钮双击功能,主要是通过调用installEventFilter函数和重写事件eventFilter函数实现。
文章来源地址https://www.toymoban.com/news/detail-659865.html
1、创建项目
启动Qt Creator,在主菜单的[文件]下,打开[新建文件或项目]菜单,弹出新建文件或项目对话框,创建Qt Widgets Application 项目,在Class Information步骤中Base class 选择Qwidget,其他基本默认即可。
在界面增加1个列表控件和1个按钮控件,为按钮添加单机事件,界面设计如上所示。
文章来源:https://www.toymoban.com/news/detail-659865.html
2、代码
widget.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>565</width>
<height>424</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<widget class="QPushButton" name="btnDoubleTest">
<property name="geometry">
<rect>
<x>430</x>
<y>20</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>测试按钮</string>
</property>
</widget>
<widget class="QListWidget" name="listWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>401</width>
<height>401</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
bool eventFilter(QObject *watched, QEvent *event);
private slots:
void on_btnDoubleTest_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "./ui_widget.h"
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->btnDoubleTest->installEventFilter(this);
}
Widget::~Widget()
{
delete ui;
}
bool Widget::eventFilter(QObject *watched, QEvent * event)
{
if(event->type()==QEvent::MouseButtonDblClick)
{
QMouseEvent * e = static_cast<QMouseEvent *>(event);
if(e->button() == Qt::LeftButton)
{
if(watched==ui->btnDoubleTest)
ui->listWidget->addItem(QString("双击事件"));
return true;
}
}
return QWidget::eventFilter(watched, event);
}
void Widget::on_btnDoubleTest_clicked()
{
ui->listWidget->addItem(QString("单击事件"));
}
3、运行效果
运行效果如上所示,单击按钮时触发单击事件,双击按钮时触发双击事件。
到了这里,关于QT6实现按钮双击事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!