精华内容
下载资源
问答
  • qt 双击事件处理

    万次阅读 2014-06-04 20:51:11
    qt双击事件响应和实现  接着上面的播放器全屏功能来写,一般播放器的全屏都是通过双击左键来实现的。 qt中有一个事件叫做mouseDoubleClickEvent,对应的就会有一个函数来处理这个事件,那就是void ...

    qt双击事件响应和实现

          接着上面的播放器全屏功能来写,一般播放器的全屏都是通过双击左键来实现的。
    qt中有一个事件叫做mouseDoubleClickEvent,对应的就会有一个函数来处理这个事件,那就是void mouseDoubleClickEvent (*e)函数,它是一个虚函数,每当对应的类产生双击事件时,就会自动调用这个函数,前提是这个类有这个函数。qt4中以下类有这个函数:

    我们使用的QGraphicsView类是继承了QAbstractScrollArea的mouseDoubleClickEvent函数,咱们的任务就是把这个函数重构一下就可以了。
    首先在头文件中声明一下:
    protected:
        void mouseDoubleClickEvent ( QMouseEvent * );
    然后cpp文件中就可以这样处理:

    /*---------------------------------------------------------------------------

    函数名:鼠标双击事件

    函数功能:对鼠标双击的响应

    函数输入:QMouseEvent *mouseEvent

    函数输出:无

    备注:

    ---------------------------------------------------------------------------*/

    void 类名::mouseDoubleClickEvent(QMouseEvent *mouseEvent)

    {

    //这是我声明的一个用来判断是应该全屏还是退出全屏的标志位,是个unsigned char型,可换成bool的

    gIndex = ~gIndex; //每次翻转一次

    if( mouseEvent->buttons() == Qt::LeftButton) //判断是否左键双击

    {

    //这个是一个停止双击延时,双击延时用来区分单击和双击,可暂时不用,下一篇文章将介绍如何区分

    //delayTimer->stop();

    if(gIndex & 0x1)

    emit fullScreen(); //发送全屏信号

    else

    emit subwindow(); //退出全屏

    }

    }

    然后把前面介绍的信号和槽连接起来就能实现简单的双击全屏了。

    connect(类名, SIGNAL(fullScreen()), this, SLOT(fullScreenSlot()));

    connect(类名, SIGNAL(subwindow()), this, SLOT(subWindowGraphic()));


    展开全文
  • Qt 控件实现双击事件

    千次阅读 2020-08-21 09:57:24
    qt中很多控件有双击事件的功能,但是还是有些控件如QWidget,QTabWidget等没有该事件。解决办法有两种 方法一:重载代码 以QTabWidget为例 // 首先我们继承QTabWidget class MyTabWidget : public QTabWidget { ...

    概述

    qt中很多控件有双击事件的功能,但是还是有些控件如QWidget,QTabWidget等没有该事件。解决办法有两种

    方法一:重载代码

    以QTabWidget为例

    // 首先我们继承QTabWidget
    class MyTabWidget : public QTabWidget
    {
    Q_OBJECT
    protected:
        // 然后重新实现鼠标双击事件
        void mouseDoubleClickEvent(QMouseEvent* e);
    public:
        MyTabWidget(QWidget* parent = nullptr) : QTabWidget(parent){ };
    };
    
    void MyTabWidget::mouseDoubleClickEvent(QMouseEvent* e)
    {
        // 你自己期望实现的功能,在这里我的实现是新建一个标签页以及新的文本编辑栏
    }
    

    方法二:事件过滤器

    h文件

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        
    protected:
        virtual bool eventFilter(QObject * obj,QEvent *event) override;
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    

    cpp文件

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->widget->installEventFilter(this);//widget控件安装事件过滤器
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
        if (obj == ui->widget) // 你要过滤的对象
                if (event->type() == QEvent::MouseButtonDblClick) 
                { // 你要过滤的对象的事件类型
                  // 你自己期望实现的功能,在这里我的实现是新建一个标签页以及新的文本编辑栏
                    
                    return true; // 注意这里一定要返回true,表示你要过滤该事件原本的实现
                }
            return false; // 返回false表示不过滤,还按默认的来
    }
    

     

    展开全文
  • QT中鼠标双击界面相应事件,主要是重载mouseDoubleClickEvent(QMouseEvent * e)事件,代码如下

    QT中鼠标双击界面相应事件,主要是重载mouseDoubleClickEvent(QMouseEvent * e)事件,代码如下

    void PRIE::mouseDoubleClickEvent(QMouseEvent * e)//鼠标双击事件响应
    {
    	QString str = "(" + QString::number(e->x()) + "," + QString::number(e->y()) + ")";
    	if (e->button() == Qt::LeftButton){
    		
    		QMessageBox::about(this," ",tr("Mouse Left Button Double Clicked:") + str) ;
    	}
    	else if (e->button() == Qt::RightButton){
    		QMessageBox::about(this, " ", tr("Mouse Right Button Double Clicked:") + str);
    	}
    	else if (e->button() == Qt::MidButton){
    		QMessageBox::about(this, " ", tr("Mouse Middle Button Double Clicked:") + str);
    	}
    }
    

    展开全文
  • 常用的消息/事件也都可以很方便地添加,但是有些控件类的消息或者属性,QT/MFC都默认没有提供重写方法,这时就只能定义某个控件的子类,并重写其响应消息/事件/属性,比如我们想定义一个按钮的双击事件,可以按照以下步骤...

    QT/MFC中对很多控件进行了封装,常用的消息/事件也都可以很方便地添加,但是有些控件类的消息或者属性,QT/MFC都默认没有提供重写方法,这时就只能定义某个控件的子类,并重写其响应消息/事件/属性,比如我们想定义一个按钮的双击事件,可以按照以下步骤执行:
    定义一个按钮子类→重写按钮子类窗口的双击事件→在主窗口中使用此按钮子类;

    (1) 定义一个按钮子类
    在项目中添加一个QT类,因为不需要新的UI文件,这里选择Qt Class:

    这里基类默认只有两种,我们选择QWidget,等文件创建成功再把基类改成QPushButton:

    (2) 重写按钮子类窗口的双击事件
    .h文件

    #pragma once
    #include <QWidget>
    #include <QPushButton>
    #include <QMouseEvent>
    
    class MyButton : public QPushButton /*父类改成QPushButton*/
    {
    	Q_OBJECT
    
    public:
    	MyButton(QWidget *parent);
    	~MyButton();
    
    protected:
    	void mouseDoubleClickEvent(QMouseEvent *ev); /*双击事件响应函数*/
    };
    
    

    .cpp文件

    #include "MyButton.h"
    #include <QMessageBox>
    #include <QString>
    
    MyButton::MyButton(QWidget *parent)
    	: QPushButton(parent)
    {
    	this->setParent(parent);
    	this->setText(QString::fromLocal8Bit("我是自定义按钮"));
    	this->setFixedSize(QSize(100, 50));
    }
    
    MyButton::~MyButton()
    {
    }
    
    void MyButton::mouseDoubleClickEvent(QMouseEvent * ev)
    {
    	if (ev->buttons() == Qt::LeftButton)
    	{
    		QMessageBox::information(NULL, "666", "double click", QMessageBox::Yes);
    	}
    }
    
    

    (3)在主窗口中使用此按钮子类
    在这里插入图片描述

    运行结果如下,搞定!
    在这里插入图片描述

    /万能的分割线*/

    顺带一提,QT的UI文件中有个类提升功能,可以很简单的把某个控件基类提升为我们的自定义控件类,而且省去一些设置的代码,步骤如下;

    如图所示,在控件设置中选择"提升为…"

    将自定义类添加到可提升列表,然后再点击提升(这里要注意,<头文件>这个框里一定要填写正确的自定义头文件,因为它默认填充的头文件全是小写字母,并且会自动补齐到ui头文件中,如果自动填充的头文件名与自定义头文件名不一致,就会报错):

    有时候提升完毕,编译时会报错,如图,这是因为系统在ui头文件中添加自定义类头文件时把它当成了系统头文件,把包含方式改成自定义类就行了:

    可以看到按钮提升为自定义控件类了,效果跟之前是一样的:

    展开全文
  • qt 未实现鼠标左键的单击,双击事件,该代码利用巧妙利用定时器区分左键的单击,双击事件
  • Qt 区分单双击事件

    千次阅读 2012-11-06 11:23:05
    //准备接受单击执行事件 void onMouseClicked(); // 鼠标单双击信号所对应的槽 QTime interval; // 记录两次点击的间隔, 间隔小于100为双击, 超过150为单击 QTimer timer; //利用QTimer的超时来触发单击事件 ...
  • 实现qt中的treeView中的右键的菜单栏的功能和双击效应,还必须大于50字,说了就这么多呀,还是不够,见谅,为了凑字
  • 今天百度了一遭,终于找到了方法,很简单,首先在MainWindow的构造函数里增加一个语句,安装mdiArea控件的事件筛选(用过QT的都知道,拖拽的空间,其名称可在ui变量中找到): ui->mdiArea->...
  • Qt 单击和双击事件响应实现

    千次阅读 2016-11-23 10:03:45
    参考这篇博文实现: http://www.cnblogs.com/siyuan/archive/2010/11/22/1883703.html 改动为:采用变量isDoubleClicked标记,单击对应1,双击对应2,常态不点击为0,更方便实现。
  • 同一个部件既要响应鼠标单击事件又要响应双击事件,而且两者响应的效果没有交集,跟不存在包含关系(如果双击事件动作包含单击事件的动作,那么这个问题就非常好解决了,只需要将双击事件特有的部分放到...
  • qt中鼠标双击事件

    2013-02-05 16:17:19
    求大牛指点下,如何在规定区域内实现双击事件? 如:我有一个listview,一个textedit,一个treeview,一个tableview,我想双击事件只在listview中实现的办法是什么?
  • Qt中如果想重新实现某一事件(比如鼠标双击事件)有两种方式: 重载该类,重新实现该事件函数 使用事件过滤器 1、为QTabWidget重新实现鼠标双击事件 废话不多说先上效果图,双击QTabWidget空白处会新建标签页,下...
  • 重写mouseDoubleClickEvent(QMouseEvent event)*实例:双击窗口时输出“sss” /*widget.h*/ #ifndef WIDGET_H #define WIDGET_H#include #include<QDebug>class Widget : public QWidget { Q_OBJECT public: Widge
  • qt 实现、区分鼠标单击,双击事件

    千次阅读 2017-04-24 15:41:09
    qt 只实现了鼠标左键的双击事件,同时会触发mousePressEvent事件,那么怎么区分鼠标的单击,双击呢,请往下看 ....
  • 通过QSpinBox或者QDoubleSpinBox安装事件过滤器去获取鼠标双击事件,但是不管怎么样就是不响应,或许是由于它是一个组合控件导致的。通过尝试给QLineEdit安装事件过滤器,可以捕获鼠标双击事件,正恰好QSpinBox或者...
  • 不解释了,渣渣写的代码很简答,大佬请指教 源文件 #include "widget.h" #include "ui_widget.h" int flag = 0; Widget::Widget(QWidget *parent) : QWidget(parent), ...setupUi(t...
  • Qt -- 区分单双击事件

    2019-10-27 02:33:51
    添加链接描述
  • QT编程之区分点击和双击事件

    千次阅读 2017-07-14 10:10:43
    QT编程中如果想要对点击、双击相应不同的事件,不作处理是无法实现的。比较好的方法就是使用Timer区分。这里实现 点击、双击一个Label,弹出不同的提示框。先上代码:MYLABEL.h#define MYLABEL_H #include #include ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 256
精华内容 102
关键字:

qt双击事件