zoukankan      html  css  js  c++  java
  • linux下Qt C++5.11自定义控件操作步骤----以自定义Label为例

    上机环境linux mint Qt5.11

    • 需求:自定义一个label,使得label在点击时可以显示鼠标的坐标值
    • 步骤一,新建一个QWidget项目

    • 方便起见,设置如下

    • 步骤二,新建一个Label类
    自定义的控件,无非是在Qt官方控件的基础上添加新的槽(通俗点就是响应事件的函数),那么必定要继承基类,那么基类的具体名称是什么?如何查找?我们不妨拖拽一个官方控件,以查看它的相关属性

     再一看,右边属性信息

    •  为项目新添加一个C++类我暂且定义为mylabel,让这一标签继承基类QLabel,根据需求,点击标签将会显示鼠标,x,y轴坐标信息,这势必关系到选择哪些合适的微件(widget,说白了就是新时代优雅的控件)响应事件,具体做法是,把鼠标放在控件名,如QLabel处,按下F1

    查看Reimplemented protected functions

    感觉mousePressEvent甚得朕心,于是乎,在头文件加上相关函数声明(protected部分)

    #ifndef MYLABEL_H
    #define MYLABEL_H
    
    #include <QWidget>
    #include<QLabel>
    class mylabel : public QLabel
    {
        Q_OBJECT
    public:
        explicit mylabel(QWidget *parent = nullptr);
    protected:
        void mousePressEvent(QMouseEvent *ev);
        void mouseReleaseEvent(QMouseEvent *ev);
        void mouseMoveEvent(QMouseEvent *ev);
    signals:
    
    public slots:
    };
    
    #endif // MYLABEL_H
    • 接下来,要写下详尽的功能,切换到类的实现文件mylabel.cpp
    #include "mylabel.h"
    #include<QLabel>
    #include<QMouseEvent>//必须添加控件头文件,否则程序会让你好看
    #include<QString>//必须添加控件头文件,否则程序会让你好看
    mylabel::mylabel(QWidget *parent) : QLabel(parent)
    {
    
    }
    void mylabel::mousePressEvent(QMouseEvent *ev)
    {
        int x=ev->x();//把鼠标放在QMouseEvent处,按下F1可以发现该类的公共函数x(),y()是用来获取x,y轴坐标的
        int y=ev->y();
        QString str=QString("x轴坐标:%1, y轴坐标:%2").arg(x).arg(y);
        this->setText(str);
    }
    void mylabel::mouseReleaseEvent(QMouseEvent *ev)
    {
    
    }
    void mylabel::mouseMoveEvent(QMouseEvent *ev)
    {
    
    }

    以为这样就万事大吉了?......I‘m deeply sorry,点击ui文件

    选中label微件,鼠标右键 点击promote to......

    在promoted class name处添加你写好的 类名----mylabel,添加成功后,下次打开,如上图所示

    接下来就是选中label组件,然后右键选择promoted to 选择拟定义好的类mylabel,最后运行结果如下,你的label控件最好拖的跟窗体一样大,这样才由更好的测试体验

     

  • 相关阅读:
    Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
    Android中使用Handler造成内存泄露的分析和解决
    Android上成功实现了蓝牙的一些Profile
    A2DP和AVRCP蓝牙音频传输协议的应用解释
    [LeetCode]Climbing Stairs
    Android该系统提供的服务--Vibrator(振子)
    阅读UML类图和时序图
    js如果你想删除您问
    【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录
    Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12155489.html
Copyright © 2011-2022 走看看