码迷,mamicode.com
首页 > 其他好文 > 详细

Qt下等待对话框的设计

时间:2015-05-23 01:19:26      阅读:446      评论:0      收藏:0      [点我收藏+]

标签:qt   c++   对话框   控件   日语   

在Qt程序经常长时间操作时采用一个等待对话框来提示用户正在操作。
Qt有标准的QProcessDialog 能部分实现这个功能,但是缺点是要计算进度,二是用户可以中途取消。所以一般我们采用自定义对话框实现这个功能。

常见实现机制

开源项目 QtWaitingSpinner,具体可以下载代码一试,它是自己用代码描绘出进度条动态来了,因此可以调整出不同大小的环形等待标志
https://github.com/snowwlex/QtWaitingSpinner

技术分享

但是他不是一个独立对话框,因此我们更多使用QMovie播放gif来实现对应功能

QWaitDialog对话框

其中的思路和素材来源于http://blog.csdn.net/liang19890820/article/details/9067679, 但这个只一个思路演示,我这里实现是完整代码,增加了圆角矩形背景

使用如下动画gif
技术分享

这里还有一个gif 动画的制作和素材库 http://preloaders.net/

其中播放使用qgif库,完整 代码
QWaitDialog.h

#ifndef QWAITDIALOG_H
#define QWAITDIALOG_H

#include <QDialog>
#include <QLabel>
#include <QMovie>
#include <QFrame>

class QWaitDialog : public QDialog
{
    Q_OBJECT
public:
    explicit QWaitDialog(QWidget *parent,const QString &title);
    ~QWaitDialog();
private:
    QMovie *movie;
    QLabel *label;
    QLabel * tip_label;
    QFrame * background;

signals:

public slots:

};

#endif // QWAITDIALOG_H

QWaitDialog.cpp


#include "qwaitdialog.h"


QWaitDialog::QWaitDialog(QWidget *parent,const QString &title) :
    QDialog(parent)
{
    this->setFixedSize(100, 100);


      //设置透明度
     this->setWindowOpacity(0.8);



      //取消对话框标题
      this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
      this->setStyleSheet("background-color:transparent;");

      //设置背景色为淡蓝色,顶层窗口做不出圆角来
      background = new QFrame(this);
      background->setStyleSheet("background-color: rgb(55, 135,215);border-radius:10px;");
      background->setGeometry(0, 0, 100, 100);

      label = new QLabel(background);

     label->setStyleSheet("background-color:transparent;");

     label->setGeometry(30, 15, 40, 40);
      movie = new QMovie(":/resource/images/wait3.gif");
     label->setScaledContents(true);
     label->setMovie(movie);

     tip_label = new QLabel(background);
     tip_label->setText(title);
     tip_label->setStyleSheet("color: white;background-color: transparent;");
     tip_label->setGeometry(10, 70, 80, 20);

     movie->start();


}

QWaitDialog::~QWaitDialog(){

    delete label;
    delete movie;
    delete tip_label;
    delete background;
}

其中,是我加的代码,主要实现用qss实现圆角窗口。这里不在对话框采用border-radius是因为这个属性对顶层窗口无效,只能先设对话框背景为透明,再上面铺一个圆角的QFrame,所有控件是加在

this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
this->setStyleSheet(“background-color:transparent;”);

background = new QFrame(this);
background->setStyleSheet(“background-color: rgb(55, 135,215);border-radius:10px;”);

最终效果
技术分享

Qt下等待对话框的设计

标签:qt   c++   对话框   控件   日语   

原文地址:http://blog.csdn.net/work4blue/article/details/45923601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!