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控件最好拖的跟窗体一样大,这样才由更好的测试体验

     

  • 相关阅读:
    POJ 1300 Open Door
    POJ 2230 Watchcow
    codevs 1028 花店橱窗布置
    codevs 1021 玛丽卡
    codevs 1519 过路费
    codevs 3287 货车运输
    codevs 3305 水果姐逛水果街二
    codevs 1036 商务旅行
    codevs 4605 LCA
    POJ 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12155489.html
Copyright © 2011-2022 走看看