VS+Qt应用开发-控件提升-以Label为例

VS+Qt应用开发-控件提升-以Label为例


在使用Qt进行界面开发时,有时候Qt原有控件不能满足需求,以Label标签为例,原始的Label控件只能进行显示,如果想要Label捕获鼠标事件(如实时显示鼠标在Label中的位置),则无法实现。可以将Label控件提升为自定义的控件,在自定义的控件中实现鼠标事件。


具体步骤如下:

  1. 在Qt Designer的ui界面中拖入一个Label控件;VS+Qt应用开发-控件提升-以Label为例

  2. 在Visual Studio中右键项目名称–>添加–>Add Qt Class(前提是VS中已经配置了Qt);VS+Qt应用开发-控件提升-以Label为例

  3. 选择Qt Class,输入自定义的类名,单击“Add”;VS+Qt应用开发-控件提升-以Label为例

  4. 类向导使用默认设置,单击“Finish”;VS+Qt应用开发-控件提升-以Label为例

  5. 在自定义类的头文件和源文件中做如下的修改:
    – 头文件中,将CMyLabel的基类改为QLabel,添加包含头文件#include <QLabel>,将构造函数参数类型改为QWidget;
    – 源文件中,对构造函数做相应的修改;
    VS+Qt应用开发-控件提升-以Label为例

    头文件

VS+Qt应用开发-控件提升-以Label为例

源文件
  1. 返回Qt Designer,右击Label控件–>提升为;VS+Qt应用开发-控件提升-以Label为例
    VS+Qt应用开发-控件提升-以Label为例

  2. 提升的类名为自定义的类名,头文件为自定义类的头文件,勾选“全局包含”,单击“添加”;VS+Qt应用开发-控件提升-以Label为例

  3. 在“提升的类”列表中会出现刚添加的名称,选中后点击“提升”;VS+Qt应用开发-控件提升-以Label为例

  4. 此时发现Label的类由QLabel变成了自定义的类;VS+Qt应用开发-控件提升-以Label为例

  5. 然后在自定义的类中对鼠标事件进行处理即可,例如添加鼠标点击事件:
    – 在CMyLabel.h中包含头文件#include <QWheelEvent>
    – 在CMyLabel.h重写基类的鼠标点击事件void mousePressEvent(QMouseEvent *ev);
    – 在CMyLabel.cpp中实现函数mousePressEvent;
    – 当鼠标在Label中按下时,就会进入mousePressEvent这个函数中。