QT 您所在的位置:网站首页 吕佳声是干什么的多少岁 QT

QT

2023-03-13 22:19| 来源: 网络整理| 查看: 265

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 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_start this->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 #include #include #include 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) // 获取文本大小,小于文本框长度,则无需滚动 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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有