使用简述
开发环境:Window10,Qt 5.9.0 ,mingw32
QT初学者,个人积累收集和整理的一些可复用的模块,博文备份,仅供参考,侵删。
同时感谢各位大佬分享的开发经验,愿与君同行,无限成长。
可直接复制使用,但任需要理解其中义。
01- 休眠等待sleep()函数
①widge.h 头文件
private slots:
void sleep(unsigned int msec);//休眠等待时间(单位毫秒)1000毫秒为1秒
②widge.cpp 源文件
//(可模块化复用)休眠等待函数
void widget::sleep(unsigned int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
③widge.cpp 函数调用
sleep(1000);//阻塞进程一秒后响应
注意:多次频繁调用会阻塞进程,导致bug,可往多线程方向考虑优化。
02- 设置窗体渐隐动画
①widge.h 头文件:
#include <QPropertyAnimation>//渐隐出现和消失动画
private slots:
void Anin();//动画渐隐出现
void Anout();
②widge.cpp 源文件:
//渐隐出现开始0到1,渐隐消失1到0
//动画渐隐出现
void widget::Anin()
{
QPropertyAnimation*an = new QPropertyAnimation(this,"windowOpacity");
an->setDuration(500);//单位毫秒
an->setStartValue(0);
an->setEndValue(1);
an->start();
}
//动画渐隐退出
void widget::Anout()
{
QPropertyAnimation*Tan = new QPropertyAnimation(this,"windowOpacity");
Tan->setDuration(500);//单位毫秒
Tan->setStartValue(1);
Tan->setEndValue(0);
Tan->start();
}
③widge.cpp 函数调用:
Anin();//动画渐隐出现
Anout();//动画渐隐退出
注意:动画透明度出现和退出时的速度曲线可设置,待学习。
03-设置系统托盘
①widge.h 头文件:
#include <QSystemTrayIcon>//系统托盘
#include <QMenu>//系统托盘的右击按键
private slots:
int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason); //设置系统托盘
int onExit();//退出调用
private:
QSystemTrayIcon m_systray; //系统托盘类
②widge.cpp 源文件: 写在构造函数{……}中
//设置系统托盘图标 和 右键托盘退出菜单按键
m_systray.setIcon(QIcon(":/pic/Timeler-logo.ico"));//可直接复制资源路径
m_systray.show();//显示系统托盘
QMenu *menu = new QMenu();
menu->addAction(ui->actionexit);//注意这个ui->actionexit在Design界面中添加并命名
m_systray.setContextMenu(menu);//设置右键菜单
//关联系统托盘事件
connect(&m_systray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));
connect(ui->actionExit,SIGNAL(triggered()),qApp,SLOT(onExit()));
③widge.cpp 源文件:
//系统托盘图标双击显示事件
int Widget::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason)
{
if(reason ==QSystemTrayIcon::Trigger||
reason==QSystemTrayIcon::DoubleClick)
{
//显示主窗口,或者其他
return 0;
//this->showNormal();
}
return 0;
}
int Widget::onExit()
{
QApplication::exit(0);
return 0;
}
04-设置读取qss样式表
①widge.h 头文件:
#include <QFile>
#include <QApplication>
//全局公共调用类
class CommonHelper
{
public:
static void setStyle(const QString &style) {
QFile qss(style);//style是带双引号的
qss.open(QFile::ReadOnly);
qApp->setStyleSheet(qss.readAll());
qss.close();
}
};
②widge.cpp 源文件:
CommonHelper::setStyle(":/qss/styleWhite.qss");//注意样式表的有效性
注意:qss文件需要添加到资源文件中,可以多次在不同的cpp中调用。如无法改变样式表,可能是qss样式表有问题。
开发时,可以先在Design视图中,在widget的样式表中写好全部的样式后复制到qss文件中。
05-设置窗体阴影
①widge.h 头文件:
#include <QGraphicsDropShadowEffect>//窗体阴影
②widge.cpp 源文件:写在构造函数中,或者单独写个函数
//设置窗体背景阴影
//(来至https://blog.csdn.net/qiangzi4646/article/details/89639056)
this->setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体透明
this->setWindowFlags(Qt::FramelessWindowHint);//设置无边框
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
shadow->setOffset(0, 0);//设置阴影距离
shadow->setColor(QColor("#444444"));//设置阴影颜色
shadow->setBlurRadius(30);//设置阴影圆角
ui->MyFrame->setGraphicsEffect(shadow); //给嵌套QWidget设置阴影
ui->showa_bg->setMargin(15);//设置边距(此步很重要, 设置宽度为阴影的宽度)
注意:设计窗体阴影时,需要主窗体包含一个layout布局器。而后layout再嵌套一个widget,控件的布局设置于widget中,再对layout布局布局器设置阴影边距。
待更新……