新手:Qt之QLabel类的应用

在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。

时间: 2024-08-28 08:41:57

新手:Qt之QLabel类的应用的相关文章

用 Qt 的 QAudioOutput 类播放 WAV 音频文件

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

用 Qt 的 QAudioOutput 类播放 WAV 音频文件(使用了libsndfile外部库)

用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的.但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡.一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件. 网上也能找到几篇相关的文章,比如: http://blog.csdn.net/qyee16/article/det

QT 操作excel 类封装

1 # pro file 2 [plain] view plaincopy 3 CONFIG += qaxcontainer 4 5 QT += core 6 7 QT -= gui 8 9 TARGET = QExcel 10 CONFIG += console 11 CONFIG -= app_bundle 12 13 TEMPLATE = app 14 15 16 SOURCES += main.cpp \ 17 qexcel.cpp 18 19 HEADERS += \ 20 qexce

【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

递归汉诺塔 双层递归 #include <iostream> void han(int n, char A, char B, char C) { static int num = 1; std::cout << "第" << num << "次"; num++; if (n<1) { return; } else { han(n - 1, A, C, B); std::cout << A <&l

QT隐含共享类 QSharedData QSharedDataPointer

QT中很多类都实现了隐含共享例如QString,QByteArray等,(这两个并没有使用QSharedData和QSharedDataPointer来实现隐含共享),但是QT的确提供了一套隐含共享机制的类QSharedData和QSharedDataPointer.核心原理是隐含共享数据指针(QSharedDataPointer重载->操作来控制所有对QSharedData数据对象的访问,确保统一的访问接口,来控制数据变化的时候,将QSharedData的原子引用计数清零.如下是我编写的示例代

Qt之QLabel

简述 QLabel提供了一个文本或图像的显示,没有提供用户交互功能. 一个QLabel能够包括以下随意内容类型: 内容 设置 纯文本 使用setText()设置一个QString 富文本 使用setText()设置一个富文本的QString 图像 使用setPixmap()设置一个图像 动画 使用setMovie()设置一个动画 数字 使用setNum()设置int或double,并转换为纯文本. Nothing 空的纯文本,默认的.使用clear()设置 简述 纯文本 显示 对齐方式 自己主动

QT 让QLabel自适应text的大

在实现了newform的2个页面的功能以后,为了完善产品的人性化,我在第2个页面上增加了一个显示前面已经选择的路径和模板名称的功能.但是这里就遇到了一个问题,如果万一用户选择的路径和名称都太长了,那么下面在显示的时候就会截断,这就很不爽了. 别看这个小问题,这就涉及了2个技巧. 1. 让QLabel自适应text的大小,直接用下面的代码: LabelName->adjustSize(); 2. 让QLabel能够自动判断并换行显示: LabelName->setGeometry(QRect(3

Qt中QScrollArea类的简单使用心得

       平台:windows 64位        Qt版本:5.5.1 MinGW 32bit 根据自己目前的需求简单说下怎么在QScrollArea滚动窗口中实现多个控件的滚动显示,先看看最终效果: 先说一下在QScrollArea滚动窗口中要添加控件要使用QScrollArea::setWidget(QWidget * widget)这个函数,当添加的控件显示范围大于scrollArea则会出现滚动条,但是从名字可以看出这个函数是用于设置一个QWidget,而不能用于不断的添加QWi

Qt国际化相关类(以前没见过codec-&gt;toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())

QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS或 ISO 2022-JP进行存储,然而俄国用户的文档是以KOI8-R 或 Windows-1251编码的. Qt提供一组QtextCodec类来实现非Unicode 和Unicode 格式之间的转换.你也可以创建自己的编码解码器. 支持的编码如下: ·        Apple Roman ·