zoukankan      html  css  js  c++  java
  • Qt之等待提示框三(QLabel进行多图片切换)

        之前分享过的等待提示框有用QMovie播放gif图片实现的,也有纯代码实现的,今天再次分享另一种实现方式,如题目所示:QLabel进行图片的切换!

        进行用户登录的时候,往往都需要后台线程进行用户信息的验证,而前台需要把对应的信息显示给用户,防止无休止的等待。当然,在其他耗时处理的时候也最好有相同的处理。
        好了,相信大家都用过QQ吧!QQ、包括360等都存在相同的做法。
    效果如下:

    中间的等待效果就是利用图标的切换实现的,那么今天咱们也实现类似的效果:
    效果如下:

    使用图标如下:


    代码如下:
    #include "loading_widget.h"

    LoadingWidget::LoadingWidget(QWidget *parent)
    : QWidget(parent)
    {
    index = 1;
    loading_label = new QLabel();
    account_label = new QLabel();
    waiting_label = new QLabel();

    QPixmap pixmap(QString(":/loginDialog/") + QString::number(index, 10));
    loading_label->setFixedSize(pixmap.size());
    loading_label->setPixmap(pixmap);
    loading_label->setScaledContents(true);

    QVBoxLayout *v_layout = new QVBoxLayout();
    v_layout->addWidget(account_label);
    v_layout->addWidget(waiting_label);
    v_layout->setSpacing(15);
    v_layout->setContentsMargins(0, 0, 0, 0);

    QHBoxLayout *h_layout = new QHBoxLayout();
    h_layout->addStretch();
    h_layout->addWidget(loading_label);
    h_layout->addLayout(v_layout);
    h_layout->addStretch();
    h_layout->setSpacing(20);
    h_layout->setContentsMargins(0, 0, 0, 30);

    timer = new QTimer(this);
    timer->setInterval(100);
    connect(timer, &QTimer::timeout, this, &LoadingWidget::updatePixmap);

    this->setLayout(h_layout);

    this->translateLanguage();
    }

    LoadingWidget::~LoadingWidget()
    {

    }

    void LoadingWidget::translateLanguage()
    {
    waiting_label->setText(tr("waiting"));
    }

    void LoadingWidget::setAccount(QString account)
    {
    this->account = account;
    }

    void LoadingWidget::start(bool is_start)
    {
    if(is_start)
    {
    //进行账号的转化,防止过长显示不全,过长用...代替
    QString elided_text;
    bool is_elided = Util::updateText(account, 200, elided_text);
    if(!is_elided)
    {
    elided_text = account;
    }

    account_label->setText(tr("hi") + elided_text);
    timer->start();
    }
    else
    {
    timer->stop();
    /**
    重新设定等待旋转的图标,因为有可能定时器停止时候图标不在起始位置
    保证每次从第一个图标开始旋转
    */
    index = 1;
    loading_label->setPixmap(QPixmap(QString(":/loginDialog/") + QString::number(index, 10)));
    }
    }

    void LoadingWidget::updatePixmap()
    {
    //若当前图标下标超过8表示到达末尾,则重新计数
    index++;
    if(index > 8)
    {
    index = 1;
    }
    QPixmap pixmap(":/loginDialog/" + QString::number(index, 10));
    loading_label->setPixmap(pixmap);
    }
        
  • 相关阅读:
    chrony软件使用说明
    使用cobbler批量安装操作系统(基于Centos7.x )
    kickstart模式实现批量安装centos7.x系统
    uCGUI字符串显示过程分析和uCGUI字库的组建
    Network boot from AMD Am79C970A
    关于TFTLCD硬件接口和驱动的问题
    (转)关于模拟地和数字地分开的问题解释!
    获取单片机代码运行时间的方法
    stm32类型cl、vl、xl、ld、md、hd的含义
    RS232转RS485电路图分析
  • 原文地址:https://www.cnblogs.com/aukle/p/3226020.html
Copyright © 2011-2022 走看看