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控件最好拖的跟窗體一樣大,這樣才由更好的測試體驗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM