在Qt中,我們不可避免的會用到QLabel類。而Qlabel的強大功能作為程式員的你有多少了解?
下面,跟着我一起在來學習一下吧!
1、添加文本
Qlabel類添加文本有兩種方式,一種是直接在實作時添加,如:
1 QLabel *label = new QLabel(QString("Holle,世界"), this);
2 //QLabel *label = new QLabel(tr("Holle,世界"), this);
一種是在實作後添加,如:
1 int a = 1+1;
2 QLabel *label = new QLabel( this);
3 label ->setText(tr("Holle,世界"));
4 //label ->setText(tr("1+1=%1").arg(a));
5 //label ->setText(QString::number(a));
6 //label ->setText(QString::number(a,'f',2));//保留兩位,如果保留一位就把2改為1
2、設定尺寸,位置
設定尺寸也有多種,常用的固定尺寸(FixedSize),最小尺寸(MinimumSize),最大尺寸(MaximumSize),代碼如下:
1 //setMinimumHeight(30); //最小行高
2 //setMinimumWidth(30); //最小列寬
3 setMinimumSize(370, 150); //設定最小尺寸
1 //setMaximumHeight(30); //最大行高
2 //setMaximumWidth(30); //最大列寬
3 setMaximumSize(370, 150); //設定最大尺寸

1 setFixedSize(365,240); //設定固定尺寸
2 //setFixedWidth(30); //固定列寬
3 //setFixedHeight(30); //固定行高
設定固定尺寸

1 int x,y,w,h;
2 label = new QLabel(this);
3 label ->setGeometry(x,y,w,h);
4 //若label的尺寸已經設定,則w,h的值無效。
設定Geometry
3、設定布局
1 QVBoxLayout *layout = new QVBoxLayout(this);
2 QLabel *label = new QLabel(QString("Holle,世界"), this);
3 layout->addWidget(label,Qt::AlignCenter); //居中
4 //Qt::AlignCenter 中心對齊
5 //Qt::AlignLeft 左對齊
6 //Qt::AlignRight 右對齊
7 //QHBoxLayout:水準布局,在水準方向上排列控件,即:左右排列。
8 //QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。
4、添加正常可視圖檔
1 labelImg = new QLabel;
2 Image1.load(":/img/head.jpg");
3 labelImg->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
4 labelImg->setPixmap(QPixmap::fromImage(Image1));
//.h檔案
5 //#include <QImage>
6 //private:
7 //QImage Image1;
5、添加圓形可視圖檔,即QQ頭像類
兩種方式,一種直接将圖檔修改為圓形的透明圖檔(*.png),一種則是使用蒙版形式,使用圖檔處理工具建立一個圓形透明圖檔(*.png),然後Qt操作代碼如下:
//.cpp檔案
labelImg = new QLabel(this);
//設定蒙版
labelImg ->setMask(pixmapBack.mask());
labelImg ->setStyleSheet("border-image:url(qrc:/img/mask_30x30.png)");//mask_30x30.png,是我做的圓形透明圖檔,已經導入到資源檔案
QPixmap head = QPixmap(":/img/head.jpg").scaled(QSize(labelImg->width(), labelImg->height()), Qt::KeepAspectRatio, Qt::SmoothTransformation); //head.jpg,是要顯示的圖檔類型大小随意,這裡我用的是*.jpg。KeepAspectRatio:保持長寬比例
labelImg ->setPixmap(head);
6、實作被點選事件
标簽實作被點選事件有兩種方式,一種是自定義一個按鈕類标簽,一種是采用事件過濾,具體的請看代碼。注:這裡采用了滑鼠事件。
1).自定義按鈕類标簽:

1 //ClickedLabel.h檔案
2 #include <QLabel>
3 class ClickedLabel : public QLabel
4 {
5 Q_OBJECT
6 public:
7 ClickedLabel( QWidget* parent = 0);
8 int IsClicked;
9 void mousePressEvent(QMouseEvent *e);//添加滑鼠響應事件
10 void mouseReleaseEvent(QMouseEvent *e);//添加滑鼠釋放事件
11 signals:
12 void clicked();//點選信号
13
14 };
15 //ClickedLabel.cpp檔案
16 ClickedLabel::ClickedLabel(QWidget* parent) : QLabel(parent)
17 {
18 setText("作者:夜潇!"); //添加标簽預設文本
19 setAlignment(Qt::AlignCenter); //設定預設對齊方式:中心對齊(居中)
20 //設定預設标簽風格
21 //setStyleSheet("ClickedLabel { background-color: rgb(143,122,102); border-radius: 10px; font: bold; color: white; }");
22 IsClicked = 0;
23 }
24
25 void ClickedLabel::mousePressEvent ( QMouseEvent * e )
26 {
27 IsClicked = 1;
28 }
29
30 void ClickedLabel::mouseReleaseEvent ( QMouseEvent * e )
31 {
32 if(IsClicked)
33 {
34 emit clicked();
35 IsClicked = 0;
36 }
37 }
自定義按鈕類标簽
2).事件過濾标簽:

1 #include <QDialog>
2 #include <QLabel>
3 #include <QEvent>
4
5 class EventFilter : public QDialog
6 {
7 Q_OBJECT
8
9 public:
10 EventFilter(QWidget *parent = 0,Qt::WindowFlags f=0);
11 ~EventFilter();
12 public slots:
13 bool eventFilter(QObject *, QEvent *);
14 private:
15 QLabel *label1;
16 };
17 //這裡有一個預設的*.cpp的頭檔案,故此我将其省略。
18 #include <QHBoxLayout>
19 #include <QMouseEvent>
20
21 EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)
22 : QDialog(parent,f)
23 {
24 label1 = new QLabel;
25
26 QHBoxLayout *layout=new QHBoxLayout(this);
27 layout->addWidget(label1);
28 label1->installEventFilter(this);
29 }
30 bool EventFilter::eventFilter(QObject *watched, QEvent *event)
31 {
32 if(watched==label1)
33 {
34 if(event->type()==QEvent::MouseButtonPress)
35 {
36 QMouseEvent *mouseEvent=(QMouseEvent *)event;
37 if(mouseEvent->buttons()&Qt::LeftButton)
38 {
39 label1->setText(tr("左鍵按下"));
40 }
41 else if(mouseEvent->buttons()&Qt::MidButton)
42 {
43 label1->setText(tr("中鍵按下"));
44 }
45 else if(mouseEvent->buttons()&Qt::RightButton)
46 {
47 label1->setText(tr("右鍵按下"));
48 }
49 }
50 if(event->type()==QEvent::MouseButtonRelease)
51 {
52 label1->setText(tr("滑鼠釋放"));
53 }
54 }
55 return QDialog::eventFilter(watched,event);
56 }
事件過濾标簽
7、實作超連結
1 label= new QLabel(tr("<style> a {text-decoration: none} </style><a href = http://haozip.2345.com>2345好壓</a>"),this);
2 //文本無下劃線:<style> a {text-decoration: none} </style>,如去掉則有下劃線。
8、修改顔色
标簽顔色有基本兩處,一是文本顔色,二是背景顔色。而文本顔色設定兩種,一種是用QPalette類,一種是StyleSheet類,代碼如下:
1 label = new QLabel(this);
2 QPalette palette;
3 palette.setColor(QPalette::WindowText,Qt::red);
4 label->setPalette(palette);
5 //文本顔色:紅色
1 label = new QLabel(this);
2 label -> setStyleSheet("QLabel { color: rgb(143,122,102);}");
3 //label -> setStyleSheet("QLabel { color: red;}");
4 //label -> setStyleSheet("QLabel { "color: #FF0000;";}");
5 //常見顔色十六進制值
6 //<font color=red或"#FF0000">紅色</font>
7 //<font color="#dd0000">淺紅色</font>
8 //<font color="#660000">深紅色</font>
9 //<font color="#00dd00">淺綠色</font>
10 //<font color="#006600">深綠色</font>
11 //<font color="#0000dd">淺藍色</font>
12 //<font color="#000066">深藍色</font>
13 //<font color="#dddd00">淺黃色</font>
14 //<font color="#666600">深黃色</font>
15 //<font color="#00dddd">淺青色</font>
16 //<font color="#006666">深青色</font>
17 //<font color="#dd00dd">淺紫色</font>
18 //<font color="#660066">深紫色</font>
設定背景顔色:
1 label = new QLabel(this);
2 label ->setStyleSheet("background-color:lightred;");
3 //顔色值可通用
9、設定圓角标簽,且擴充類。注:此圓角和第5點中的圓不同用。
1 label = new Qlabel(this);
2 label -> setStyleSheet("Qlabel{color: white;"
3 "border-radius: 20px; border: 2px groove gray;border-style: outset;}"/*此處設定圓角*/
4 "Qlabel:hover{background-color:lightgreen; color: black;}"
5 "Qlabel:pressed{background-color:rgb(85, 170, 255);border-style: inset; }");
6 //注:當radius的值是控件高度或者寬度一半時可化作圓;border:邊 hover:點燃 outset:正常 pressed:按下 inset:内嵌
好了,今天就先到這吧!如果你也有好的代碼可以私信或者加以評論。如有疑問,可随時聯系QQ:1285015525。