QT--自定制QprogreessWidget

注释:在项目中经常会适应等待对话框,显示任务的状态今天在这里实现等待对话框的动态显示!

#pragma once
头文件
#include "PWaitingDialog.h"
 
 
//透明等待框
 
 
namespace puic
{
	class CPWaitingDialog : public QDialog
	{
	public:
		//isWidget是否作为一个子控件显示(不是单独的对话框)
		CPWaitingDialog(QWidget* parent = nullptr, bool isWidget = false);
 
 
	protected:
		virtual void showEvent(QShowEvent * event);
		virtual void hideEvent(QHideEvent * event);
		virtual void closeEvent(QCloseEvent * event);
	private:
		QLabel* _iconLabel;
		QMovie* _movie;
		bool _isWidget;
	};
}
 
 #include 
   
 "stdafx.h" 
 
#include "PWaitingDialog.h"
 
 
namespace puic
{
	CPWaitingDialog::CPWaitingDialog(QWidget* parent,
		bool isWidget)
		: QDialog(parent),
		_iconLabel(new QLabel(this)),
		_movie(nullptr),
		_isWidget(isWidget)
	{
		if (_isWidget) {
			setWindowFlags(Qt::Widget);
		}
		else {
			setWindowFlags(windowFlags() | Qt::FramelessWindowHint |
				Qt::WindowStaysOnTopHint);
		}
		setFixedSize(QSize(70, 70));
		setAttribute(Qt::WA_TranslucentBackground, true);
		setStyleSheet("background-color:rgba(255,255,255,0%);");
 
 
		QHBoxLayout* layout = new QHBoxLayout();
		layout->setContentsMargins(0, 0, 0, 0);
		_iconLabel->setScaledContents(true);
		layout->addWidget(_iconLabel);
		_movie = new QMovie(":/puic/styles/icons/progress/waiting_dot.gif");
		connect(_movie, &QMovie::frameChanged, this, [this](int frameNumber){
			_iconLabel->setPixmap(_movie->currentPixmap());
		});
 
 
		setLayout(layout);
	}
 
 
	void CPWaitingDialog::showEvent(QShowEvent * event)
	{
		if (!_isWidget) {
			QWidget* parent = parentWidget();
			if (parent) {
				//再次显示时,在父窗口的居中显示
				QPoint ppos = parent->pos();
				int tx = ppos.x() + (parent->width() - this->width()) / 2;
				int ty = ppos.y() + (parent->height() - this->height()) / 2;
				move(tx, ty);
			}
		}
		_movie->start();
		QWidget::showEvent(event);
	}
 
 
	void CPWaitingDialog::hideEvent(QHideEvent * event)
	{
		_movie->stop();
		QWidget::hideEvent(event);
	}
 
 
	void CPWaitingDialog::closeEvent(QCloseEvent * event)
	{
		_movie->stop();
		QWidget::closeEvent(event);
	}
}
 
 
#include <QApplication>
#include "PWaitingDialog.h"
using namespacing puic;
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CPWaitingDialog w;
    w.show();
 
 
    return a.exec();
}
 
 

 

猜你喜欢

转载自blog.csdn.net/qq_36038987/article/details/80775006