• 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);
    }
        
  • 相关阅读:
    查看Android源码版本
    Android中级教程(一)之手机页面的转换setContentView的应用 转
    string 在clone()中的特殊性 (转载)
    关于一个C语言二维数组的问题
    异常机制及throw与throws的区别 (z)
    关于CHelloDoc* GetDocument() 的一些问题 ?
    VC++错误 'OnLButtonDown' : member function not declared in 'CYx2_31View'
    Android中利用LinearLayout继承实现ImageButton 转
    ID 指针 句柄
    句柄和ID 指针与handle的区别
  • 原文地址:https://www.cnblogs.com/aukle/p/3226020.html
Copyright © 2020-2023  润新知