在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的值無效。
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。