c++ qt 学习笔记 2021-2-26(QLabel的对齐方式等一些属性,QLabel自适应文字大小,QLabel播放gif,动态的QQ消息气泡框)

44 篇文章 8 订阅

1、QLabel的对齐方式等一些属性:

(1)对齐方式:

QLabel对齐的方法:

Qt::Alignment  alignalignment() const;    //获取对齐方式
void setAlignment(Qt::Alignment align);   //设置对齐方式

Qt::Alignment属性:

Qt::AlignLeft   //水平方向靠左。
Qt::AlignRight  //水平方向靠右。
Qt::AlignHCenter  //水平方向居中。
Qt::AlignJustify  //水平方向调整间距两端对齐。
Qt::AlignTop      //垂直方向靠上。
Qt::AlignButton   //垂直方向靠下。
Qt::AlignVCenter   //垂直方向居中。
Qt::AlignCenter    //水平和垂直方向都居中

想要水平和竖直方向都居中时:

ui -> label -> setAlignment(Qt::AlignCenter);
ui -> label -> setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
(2)缩进:
int indent() const;     //获取文本的缩进量
void setIndent(int);    //设置文本的缩进量
(3)边距:
int margin() const;                //获取边距  
void setMargin(int margin);        //设置边距
(4)是否允许换行:
bool wordWrap() const;            // 判断是否允许换行  
void setWordWrap(bool on);     // 设置是否允许换行
(5)是否允许缩放:
bool hasScaledContenes() const;    // 判断是否允许图像缩放  
void setScaledContents(bool on);    // 设置是否允许图像缩放 

2、QLabel自适应大小:

(1)adjustSize():
//根据setText中的text的长度自适应
ui -> label -> adjustSize();
(2)setScaledContents():
ui -> label -> setScaledContents(true);

上面两个属性设置以后显示的效果是一样的,设置label背景颜色以后会发现,两者都是形成对文字的一圈包裹:
在这里插入图片描述
但是,设置以后输出labelwidthheight以后就会发现,adjustSize()修改了label的宽高,而setScaledContents()只是自适应的显示,并不会改变label的宽高。

如果要在自适应大小的情况下,留出一部分空间,可以用resize来留下空区域。

qqmessage->adjustSize();
qqmessage->resize(qqmessage->width()+30,qqmessage->height()+20);
//居中
qqmessage->setAlignment(Qt::AlignCenter);
qqmessage->setStyleSheet("background-color:rgb(191,191,191);border-radius:5px;");

在这里插入图片描述

3、QLabel播放gif:

通过QLabelsetMovie()方法实现。

mainwindow.h中:

#include <QMovie>

mainwindow.cpp中:

    QMovie *Movie = new QMovie("F:/1/1");
    Movie->setSpeed(1000);
    Movie->setBackgroundColor(QColor(10, 10, 10));
    //ui->label用于显示gif
    ui->label->setMovie(Movie);
    ui->label->show();
    Movie->start();

4、设计动态的QQ消息气泡框:

(1)分析:

QQ消息的气泡大致可以按照如下结构进行划分:
在这里插入图片描述
三个部分分别用一个控件显示即可。中间的小角可以在图标库中找到一个比较像的:
在这里插入图片描述

(2)设计气泡框样式:

使用参数来动态地显示样式:

QWidget* message(const QString &name,const QString &icon, const QString &message) {
        QWidget *qwidget = new QWidget(this);

        QPushButton *qqicon = new QPushButton(qwidget);    //头像
        QLabel *h1 = new QLabel(qwidget);     
        QLabel *qqmessage = new QLabel(qwidget);

        //头像,qq名,qq信息,最后信息时间
        qqicon->setStyleSheet(QString("width:34px;height:34px;border:0px;border-radius:17px;border-image:url(:/new/prefix1/source/%1);").arg(icon));
        h1->setStyleSheet("background-color:rgb(255,255,255,0%);border-image:url(:/new/prefix1/source/h1.png);");
        h1->resize(8,10);
        //设置消息内容
        qqmessage->setText(message);
        //自适应长度
        qqmessage->adjustSize();
        qqmessage->resize(qqmessage->width()+30,qqmessage->height()+20);
        //水平和竖直方向都居中显示
        qqmessage->setAlignment(Qt::AlignCenter);
        qqmessage->setStyleSheet("background-color:rgb(191,191,191);border-radius:5px;");

        qqicon->move(15,10);
        h1->move(55,20);
        qqmessage->move(63,15);

        qwidget->resize(290,80);
        return qwidget;
    }
(3)调用气泡控件:

使用气泡框,其中a,b,c为主界面类中传递过来的参数:

    QWidget  *message1 = message(a,b,c);
    message1->setParent(ui->groupBox_2);
    message1->move(10,8);
(4)运行结果:

在这里插入图片描述

  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值