• Qt事件处理(一)


      从这章开始,我将简单实现Qt事件处理的五种方式,这五种方式的实现都是基于一个自定义的Button,我将它命名为MyButton。由于我是刚学Qt,有什么讲的不对的地方,请指正,不胜感激。

      首先来看第一种事件处理:"重新实现特定的事件处理器",这种方式最简单,派生于一个组件,重新实现它的事件处理。这里我主要实现的是mousePressEvent、mouseReleaseEvent以及mouseMoveEvent这三个事件处理,而实现的方式都差不多,不同在于设置Button显示的文本。

      mybutton.h的头文件如下:

    #ifndef MYBUTTON_H
    #define MYBUTTON_H
    
    #include <QPushButton>
    #include <QMouseEvent>
    
    class MyButton : public QPushButton
    {
    
    protected:
        void mousePressEvent(QMouseEvent* event);
        void mouseReleaseEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
    };
    
    #endif

       mybutton.cpp的文件如下:

    #include "mybutton.h"
    
    void MyButton::mousePressEvent(QMouseEvent *event)
    {
        this->setText(QString("Press: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
    }
    
    void MyButton::mouseReleaseEvent(QMouseEvent *event)
    {
        this->setText(QString("Release: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
    }
    
    void MyButton::mouseMoveEvent(QMouseEvent *event)
    {
        this->setText(QString("Move: %1, %2").arg(QString::number(event->x()), QString::number(event->y())));
    }

      main函数调用为:

    #include <QtGui/QApplication>
    #include <QtCore/QTextCodec>
    #include "mybutton.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
        MyButton *button = new MyButton;
        button->setWindowTitle(QObject::tr("重新实现特定的事件处理器"));
        button->resize(400, 200);
        button->show();
        
        return a.exec();
    }

      程序运行时,Button上的文本随着鼠标在不同的位置点击、释放以及左击拖动鼠标的不同而显示相应的文本。界面如下:

                  

  • 相关阅读:
    Qt之模型/视图(自己定义button)
    Spring入门--控制反转(IOC)与依赖注入(DI)
    iOS关闭键盘简单实现(objc/swift)
    事件传递机制总结
    Skill of vim
    Java中ArrayList和LinkedList区别
    java截取url中的值
    MySQL主从复制与主主复制
    MySQL读写分离
    Mysql-Proxy代理配置
  • 原文地址:https://www.cnblogs.com/venow/p/2718014.html
Copyright © 2020-2023  润新知