新手:Qt之QLabel类的应用
在Qt中,我们不可避免的会用到QLabel类。而Qlabel的强大功能作为程序员的你有多少了解?
下面,跟着我一起在来学习一下吧!
1、添加文本
Qlabel类添加文本有两种方式,一种是直接在实现时添加,如:
QLabel *label = new QLabel(QString("Holle,世界"), this);
//QLabel *label = new QLabel(tr("Holle,世界"), this);
一种是在实现后添加,如:
int a = +;
QLabel *label = new QLabel( this);
label ->setText(tr("Holle,世界"));
//label ->setText(tr("1+1=%1").arg(a));
//label ->setText(QString::number(a));
//label ->setText(QString::number(a,'f',2));//保留两位,如果保留一位就把2改为1
2、设置尺寸,位置
设置尺寸也有多种,常用的固定尺寸(FixedSize),最小尺寸(MinimumSize),最大尺寸(MaximumSize),代码如下:
//setMinimumHeight(30); //最小行高
//setMinimumWidth(30); //最小列宽
setMinimumSize(, ); //设置最小尺寸
//setMaximumHeight(30); //最大行高
//setMaximumWidth(30); //最大列宽
setMaximumSize(, ); //设置最大尺寸
setFixedSize(,); //设置固定尺寸
//setFixedWidth(30); //固定列宽
//setFixedHeight(30); //固定行高
设置固定尺寸
int x,y,w,h;
label = new QLabel(this);
label ->setGeometry(x,y,w,h);
//若label的尺寸已经设置,则w,h的值无效。
设置Geometry
3、设置布局
QVBoxLayout *layout = new QVBoxLayout(this);
QLabel *label = new QLabel(QString("Holle,世界"), this);
layout->addWidget(label,Qt::AlignCenter); //居中
//Qt::AlignCenter 中心对齐
//Qt::AlignLeft 左对齐
//Qt::AlignRight 右对齐
//QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。
//QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。
4、添加常规可视图片
labelImg = new QLabel;
Image1.load(":/img/head.jpg");
labelImg->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
labelImg->setPixmap(QPixmap::fromImage(Image1));
//.h文件
//#include <QImage>
//private:
//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).自定义按钮类标签:
//ClickedLabel.h文件
#include <QLabel>
class ClickedLabel : public QLabel
{
Q_OBJECT
public:
ClickedLabel( QWidget* parent = );
int IsClicked;
void mousePressEvent(QMouseEvent *e);//添加鼠标响应事件
void mouseReleaseEvent(QMouseEvent *e);//添加鼠标释放事件
signals:
void clicked();//点击信号 };
//ClickedLabel.cpp文件
ClickedLabel::ClickedLabel(QWidget* parent) : QLabel(parent)
{
setText("作者:夜潇!"); //添加标签默认文本
setAlignment(Qt::AlignCenter); //设置默认对齐方式:中心对齐(居中)
//设置默认标签风格
//setStyleSheet("ClickedLabel { background-color: rgb(143,122,102); border-radius: 10px; font: bold; color: white; }");
IsClicked = ;
} void ClickedLabel::mousePressEvent ( QMouseEvent * e )
{
IsClicked = ;
} void ClickedLabel::mouseReleaseEvent ( QMouseEvent * e )
{
if(IsClicked)
{
emit clicked();
IsClicked = ;
}
}
自定义按钮类标签
2).事件过滤标签:
#include <QDialog>
#include <QLabel>
#include <QEvent> class EventFilter : public QDialog
{
Q_OBJECT public:
EventFilter(QWidget *parent = ,Qt::WindowFlags f=);
~EventFilter();
public slots:
bool eventFilter(QObject *, QEvent *);
private:
QLabel *label1;
};
//这里有一个默认的*.cpp的头文件,故此我将其省略。
#include <QHBoxLayout>
#include <QMouseEvent> EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)
: QDialog(parent,f)
{
label1 = new QLabel; QHBoxLayout *layout=new QHBoxLayout(this);
layout->addWidget(label1);
label1->installEventFilter(this);
}
bool EventFilter::eventFilter(QObject *watched, QEvent *event)
{
if(watched==label1)
{
if(event->type()==QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent=(QMouseEvent *)event;
if(mouseEvent->buttons()&Qt::LeftButton)
{
label1->setText(tr("左键按下"));
}
else if(mouseEvent->buttons()&Qt::MidButton)
{
label1->setText(tr("中键按下"));
}
else if(mouseEvent->buttons()&Qt::RightButton)
{
label1->setText(tr("右键按下"));
}
}
if(event->type()==QEvent::MouseButtonRelease)
{
label1->setText(tr("鼠标释放"));
}
}
return QDialog::eventFilter(watched,event);
}
事件过滤标签
7、实现超链接
label= new QLabel(tr("<style> a {text-decoration: none} </style><a href = http://haozip.2345.com>2345好压</a>"),this);
//文本无下划线:<style> a {text-decoration: none} </style>,如去掉则有下划线。
8、修改颜色
标签颜色有基本两处,一是文本颜色,二是背景颜色。而文本颜色设置两种,一种是用QPalette类,一种是StyleSheet类,代码如下:
label = new QLabel(this);
QPalette palette;
palette.setColor(QPalette::WindowText,Qt::red);
label->setPalette(palette);
//文本颜色:红色
label = new QLabel(this);
label -> setStyleSheet("QLabel { color: rgb(143,122,102);}");
//label -> setStyleSheet("QLabel { color: red;}");
//label -> setStyleSheet("QLabel { "color: #FF0000;";}");
//常见颜色十六进制值
//<font color=red或"#FF0000">红色</font>
//<font color="#dd0000">浅红色</font>
//<font color="#660000">深红色</font>
//<font color="#00dd00">浅绿色</font>
//<font color="#006600">深绿色</font>
//<font color="#0000dd">浅蓝色</font>
//<font color="#000066">深蓝色</font>
//<font color="#dddd00">浅黄色</font>
//<font color="#666600">深黄色</font>
//<font color="#00dddd">浅青色</font>
//<font color="#006666">深青色</font>
//<font color="#dd00dd">浅紫色</font>
//<font color="#660066">深紫色</font>
设置背景颜色:
label = new QLabel(this);
label ->setStyleSheet("background-color:lightred;");
//颜色值可通用
9、设置圆角标签,且扩展类。注:此圆角和第5点中的圆不同用。
label = new Qlabel(this);
label -> setStyleSheet("Qlabel{color: white;"
"border-radius: 20px; border: 2px groove gray;border-style: outset;}"/*此处设置圆角*/
"Qlabel:hover{background-color:lightgreen; color: black;}"
"Qlabel:pressed{background-color:rgb(85, 170, 255);border-style: inset; }");
//注:当radius的值是控件高度或者宽度一半时可化作圆;border:边 hover:点燃 outset:常规 pressed:按下 inset:内嵌
好了,今天就先到这吧!如果你也有好的代码可以私信或者加以评论。如有疑问,可随时联系QQ:1285015525。
新手:Qt之QLabel类的应用的更多相关文章
- Qt之重写QLabel类
在mylabel.h 文件中#ifndef MYLABEL_H#define MYLABEL_H #include <QLabel>/*重新实现QLabel类,使其支持点击事件*/clas ...
- 【QT】常用类
官方文档 doc QWidget QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己. 每一个窗口部件都是矩形的, ...
- 【Qt】QLabel实现的圆形图像
本篇只描述圆形图像的两种实现方式,动态阴影边框如下: [Qt]QLabel之动态阴影边框 目前实现的效果如下: 左右两边实现的方式不同: 右边比较简单 min-width: 100px; max-wi ...
- Qt 的QString类的使用
Qt的QString类提供了很方便的对字符串操作的接口. 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替. QString::fill ( QChar ch, int size ...
- 用 Qt 的 QAudioOutput 类播放 WAV 音频文件
用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...
- Qt 学习之路 2(73):Qt 线程相关类
Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类 豆子 2013年11月26日 Qt 学习之路 2 7条评论 希 ...
- QT隐含共享类 QSharedData QSharedDataPointer
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/davidsu33/article/details/28857391 QT中非常多类都实现了隐含共享比 ...
- Qt之QLabel
简述 QLabel提供了一个文本或图像的显示,没有提供用户交互功能. 一个QLabel可以包含以下任意内容类型: 内容 设置 纯文本 使用setText()设置一个QString 富文本 使用setT ...
- <QT之Bug制造机>QT中串口类“QSerialPort”的学习笔记
QT5中已经增加了串口类QSrialPort,可以直接调用API函数进行快速开发. 1. 获取串口信息 Dialog::Dialog(QWidget *parent) : QDialog(parent ...
随机推荐
- SpringBoot中使用SpringDataJPA
SpringDataJPA的使用 JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范. 为Java开发人员提供了一种对象/关联映射工具来管理Java ...
- MySql数据库类型bit等与JAVA中的对应类型【布尔类型怎么存】
用char(1):可以表示字符或者数字,但是不能直接计算同列的值.存储消耗1个字节 用tinyint:只能表示数字,可以直接计算,存储消耗2个字节 用bit: 只能表示0或1,不能计算,存储消耗小于等 ...
- linux系统root密码忘了怎么办 三种方法快速找回root密码
linux root密码找回方法一 第1步:在系统进入单用户状态,直接用passwd root去更改. 第2步:用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: ...
- Lucene6.6.0 案例与学习路线
之前在学习Lucene这个全文检索工具,为项目搜索引擎的开发打下基础.在这里先分享一下关于Lucene的学习心得. 核心的学习流程是:索引文件格式--索引创建过程--检索流程. 1.首先建议参看这篇精 ...
- Nginx 服务器性能Bug和性能优化方案(真实经历)
一.遇到的问题 1.问题:本应该是3个ffmpeg ,但是怎么会有5个ffmpeg出现? 2.Lua脚本问题,一直写入日志,导致有大量的日志,这里的错误日志是直接写进nginx的error.log 日 ...
- 在html5 canvas的destination-atop属性的一些奇怪的问题
最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ...
- html5 canvas arcTo()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java7,java8 中HashMap和ConcurrentHashMap简介
一:Java7 中的HashMap 结构: HashMap 里面是一个数组,然后数组中每个元素是一个单向链表.链表中每个元素称为一个Entry 实例,Entry 包含四个属性:key, value, ...
- HDU 1262 寻找素数对 模拟题
题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数. 题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数. ...
- windows常用设置
1.截图 A.QQ打开,ctrl + Alt + A B. cmd 输入 截图工具 2.录制windows操作步骤 命令行输入:psr.exe