QT-通用的软件界面框架,好看且实用

  • 前言
  • 一、演示效果
  • 二、配置说明
  • 三、关键程序
  • 四、程序下载

前言

常规软件开发,使用这种界面框架,基本是可以做很多个常规项目,比较有参考意义。
本次软件使用开发的环境是QT5.13.2+VS2017,不同的开发环境重新配置即可。

一、演示效果

二、配置说明

1、软件框架结构说明,不同界面独立不同的库来调用。

2、属性配置
(1)添加包含目录:$(SolutionDir)

(2)添加库依赖

2、控件升级

三、关键程序

1、主程序内容

#include "QSoftFrame.h"
#include "Page/PageHelpWidget/PageHelpWidget.h"
#include "Page/PageLogWidget/PageLogWidget.h"
#include "Page/PageMainWidget/PageMainWidget.h"
#include "Page/PageMinitorWidget/PageMinitorWidget.h"
#include "Page/PageSetingWidget/PageSetingWidget.h"#include <QFile>
QSoftFrame::QSoftFrame(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);initialUI();initialSingleSlot();initialQss();
}//初始化UI
void QSoftFrame::initialUI()
{// 去掉原来的标题栏this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::MaximizeUsingFullscreenGeometryHint);ui.btnMax->setVisible(false);// 绑定按键和界面之间的关系m_btnWidgetMap.insert(ui.btnMain, PageMainWidget());m_btnWidgetMap.insert(ui.btnLog, PageLogWidget());m_btnWidgetMap.insert(ui.btnHelp, PageHelpWidget());m_btnWidgetMap.insert(ui.btnSet, PageSetingWidget());m_btnWidgetMap.insert(ui.btnMinitor, PageMinitorWidget());ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnMain]);ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnLog]);ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnHelp]);ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnSet]);ui.stackedWidget->addWidget(m_btnWidgetMap[ui.btnMinitor]);// 绑定信号槽auto btns = m_btnWidgetMap.keys();for (auto pBtn : btns){connect(pBtn, SIGNAL(clicked()), this, SLOT(slotPageChange()));}//默认选中第一个界面ui.btnMain->clicked();}//切换不同页面
void QSoftFrame::slotPageChange()
{QToolButton *pBtn = (QToolButton*)sender();setPageBtnsCheckState(false);pBtn->setChecked(true);//有找到Widget就切换auto item = m_btnWidgetMap.find(pBtn);if (item != m_btnWidgetMap.end()){ui.stackedWidget->setCurrentWidget(item.value());}}//初始化信号槽
void QSoftFrame::initialSingleSlot()
{//最小化connect(ui.btnMin, &QToolButton::released, this, &QMainWindow::showMinimized);//软件关闭connect(ui.btnClose, &QToolButton::released, this, [&]() {this->close();});//最大化connect(ui.btnMax, &QToolButton::released, this, [&]() {this->showMaximized();ui.btnMax->setVisible(false);ui.btnRestore->setVisible(true);});//重置界面connect(ui.btnRestore, &QToolButton::released, this, [&]() {this->showNormal();ui.btnMax->setVisible(true);ui.btnRestore->setVisible(false);});
}// 设置页面按键状态
void QSoftFrame::setPageBtnsCheckState(bool bCheck)
{ui.btnMain->setChecked(bCheck);ui.btnLog->setChecked(bCheck);ui.btnHelp->setChecked(bCheck);ui.btnSet->setChecked(bCheck);ui.btnMinitor->setChecked(bCheck);
}//初始化样式
void QSoftFrame::initialQss()
{QString fileName = QString(":/Resource/App.qss");QFile file(fileName);if (file.open(QFile::ReadOnly)){QString qss = QLatin1String(file.readAll());this->setStyleSheet(qss);file.close();}}//显示事件
void QSoftFrame::showEvent(QShowEvent *event)
{//添加WA_Mapped属性,防止界面卡死this->setAttribute(Qt::WA_Mapped);QMainWindow::showEvent(event);}//界面大小重置界面
void QSoftFrame::resizeEvent(QResizeEvent *event)
{if (this->isMaximized()){ui.btnMax->setVisible(false);ui.btnRestore->setVisible(true);}else if (this->isMinimized()){}else if (this->isFullScreen()){}else{ui.btnMax->setVisible(true);ui.btnRestore->setVisible(false);}
}

2、可拖动标题栏

#include "QWidgetTiltle.h"QWidgetTiltle::QWidgetTiltle(QWidget *parent): QWidget(parent)
{ui.setupUi(this);
}QWidgetTiltle::~QWidgetTiltle()
{}void QWidgetTiltle::mousePressEvent(QMouseEvent *event)
{//鼠标左键按下事件if (event->button() == Qt::LeftButton){//记录鼠标左键状态m_leftButtonPressed = true;//记录鼠标在屏幕中的位置m_start = event->globalPos();}
}void QWidgetTiltle::mouseMoveEvent(QMouseEvent *event)
{if (m_leftButtonPressed){//将父窗体移动到父窗体原来的位置加上鼠标移动的位置:event->globalPos()-m_startthis->window()->move(this->window()->geometry().topLeft() + event->globalPos() - m_start);//将鼠标在屏幕中的位置替换为新的位置m_start = event->globalPos();}
}void QWidgetTiltle::mouseReleaseEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton){m_leftButtonPressed = false;}
}// 双击切换界面
void QWidgetTiltle::mouseDoubleClickEvent(QMouseEvent *event)
{Q_UNUSED(event);if (this->window()->isMaximized()){//显示正常的窗口this->window()->showNormal();}else{//不是最大化的时候,双击最大化this->window()->showMaximized();}}

3、滚动式提示标签

#include "HLabelEx.h"
#include <QPainter>
#include <QTimer>
#include <QFontMetrics>
#include <QTimerEvent>const QString strSpace("   ");HLabelEx::HLabelEx(QWidget *parent) : QLabel(parent)
{timerId = -1;fontSize = 11;
}void HLabelEx::setText(const QString & txt)
{QLabel::setText(txt);upateLabelRollingState();
}void HLabelEx::paintEvent(QPaintEvent *e)
{QPainter p(this);//  获取文本框的大小QRect rc = rect();rc.setHeight(rc.height() - 2);rc.setWidth(rc.width() - 2);//  设置即将绘制文字的字体QFont ft = font();ft.setBold(false);ft.setPointSize(fontSize);p.setFont(ft);p.setPen(QPen(Qt::white));//  设置绘制文字的开始位置,也就是将文字往左移动多少rc.setLeft(rc.left() - left);//  如果文字已经显示到末尾,则再添加一遍文字,做出循环滚动的效果QString strText = text();if(timerId >= 0)strText += strSpace + text();//  绘制文字p.drawText(rc, Qt::AlignVCenter, strText);
}void HLabelEx::timerEvent(QTimerEvent *e)
{if(e->timerId() == timerId && isVisible()){//  每次左移1个像素left += 1;//  判断是否已经完成一遍循环,完成则恢复起始位置,重新开始循环QFont ft = font();ft.setPointSize(fontSize);QFontMetrics fm(ft);int txtWidth = fm.width(text());int spaceWidth = fm.width(strSpace);if((txtWidth + spaceWidth) < left)left = 0;repaint();}QLabel::timerEvent(e);
}void HLabelEx::resizeEvent(QResizeEvent *e)
{QLabel::resizeEvent(e);upateLabelRollingState();
}void HLabelEx::upateLabelRollingState()
{//  获取文本大小,小于文本框长度,则无需滚动QFont ft = font();ft.setPointSize(fontSize);QFontMetrics fm(ft);int nW = fm.width(text());left = 0;//  开启文本框滚动if(nW > width()){timerId = startTimer(100);}//  关闭文本框滚动else{if(timerId >= 0){killTimer(timerId);timerId = -1;}}
}

四、程序下载

https://download.csdn.net/download/u013083044/87558246?spm=1001.2014.3001.5503

QT-通用的软件界面框架,好看且实用相关推荐

  1. 思迈特软件Smartbi:好看又实用的excel柱状图是怎么做到的

    ​在现在这个看重颜值的时代,很多东西都要注重美观,你做的excel简陋不美观,领导肯定不喜欢,让你回去重做,所以excel柱状图怎么做的好看美观,这就体现了你的水平. 简单的柱状图制作步骤一般是这样的 ...

  2. Qt的纽带风格界面实现(最新的Office Ribbon风格)

    Qt的纽带风格界面实现(最新的Office Ribbon风格) 之前有朋友已经做了360风格的自定义界面,非常棒,也帮助了不少开发的朋友.近期我也用Qt做了一些界面框架和风格方面的工作,主要是客户端软 ...

  3. 发布一个免费漂亮的仿Outlook风格、支持换肤的通用界面框架

    这个通用界面框架是基于OSGi.NET插件框架来做的,先看一下运行效果. 换个皮肤试试看! 这个界面框架是OSGi.NET面向服务插件平台的一个通用的界面插件,OSGi.NET面向服务插件框架是一个支 ...

  4. java swing漂亮界面框架_开源软件分享-漂亮的JavaFx GUI界面框架

    虽然说Java目前主要的应用领域是服务端,GUI桌面端软件也有极少量的应用场景(桌面软件还是C#方便),所以今天给大家分享一款漂亮的JavaFx GUI界面框架BootstrapFX. Java Fx ...

  5. PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍

    PyQt5 Qt Designer 新手教程(一)-- 软件界面介绍 教程博文 一.前言 终于学到了 PyQt5 Qt 设计师(Qt Designer)这个软件,博主感觉心情还是很激动的.因为,当初学 ...

  6. 让Qt程序适配高分辨率屏幕,解决软件界面错乱异常

    让Qt程序适配高分辨率屏幕,解决软件界面错乱异常 一.问题 二.原因 三.解决方案 1.更改显示器分辨率或者不使用缩放 2.使用"高DIP缩放替代" 3.修改软件,使之自动适配 a ...

  7. 使用Qt Designer制作软件的图形界面

    介绍 Qt Designer是一款设计和构建图形用户界面的Qt工具,本文介绍如何使用Qt Manager制作软件的图形界面. 安装 使用Qt Manager时,首先在python的环境中安装pyqt, ...

  8. 3D结构光投影测量软件 / 界面 (基于QT)

    3D结构光投影软件/界面 硬件构成 软件构成 界面 硬件构成 系统是由单目相机+单个投影仪构建 相机:Basler相机(分辨率:832 ×\times× 632,最高采集速度>500fps) 投 ...

  9. labview通用视觉软件框架,机器视觉通用框架,里面有安装教程

    labview通用视觉软件框架,机器视觉通用框架,里面有安装教程5872616775880854TB_53968806

最新文章

  1. MyEclipse设置JSP页面默认编码方式
  2. opencv 斑马线,条纹检测
  3. linux apr文件解压失败,Linux安装apache服务器遇到的问题
  4. iOS中Block的基础用法
  5. 大湾区第二次.NET技术交流会圆满成功
  6. mysql8.0.22安装步骤图解_MySQL server 5.5的安装 步骤图解
  7. 余宏德:Sun所有的核心技术都是开放的
  8. 洛谷——P1914 小书童——凯撒密码
  9. html底部线条,这种APP底部横线+文字该怎么布局?css
  10. Input标签牲描述
  11. phpstorm 正则匹配搜索_phpstorm 有哪些奇技淫巧?
  12. 小米球外网映射本地tomcat
  13. PHP获取当前完整网址加HTTP/HTTPS
  14. WIN10教育版怎么可以变更为专业版
  15. ddl是什么意思网络语_跟随你大学的流行词语 DDL 你竟还不知道?
  16. xp安全模式下如何修复计算机,xp系统如何进入安全模式|进入安全模式修复系统...
  17. VSCode这13款插件也太好用了
  18. EasyRecovery14个人版电脑数据恢复软件支持Win/Mac
  19. 如何用Python从海量文本抽取主题?【转载:王树义】
  20. Python Scrapy - Ins爬虫

热门文章

  1. Android Studio快速集成讯飞SDK实现文字朗读功能
  2. ffmpeg对ts流的解析
  3. 产品经理全套入门学习资料,及各行业解析分享
  4. 解码中的AnnexB和avcC两种分割数据方式
  5. 矩估计和最大似然估计关系
  6. ajax提交,form表单提交,onsubmit=return checksubmit()提交验证
  7. vue中activated和deactivated是什么
  8. 仿微信朋友圈,文字展开全文,全文收起功能
  9. Opencv中BGR、YUV、YUV_I420\NV12分析
  10. VUE3.X——获取dom元素