Qt 软件库用来开发PC端软件非常方便,如果有一套系统,即有服务端、移动端及PC端,那么PC端最适合用Qt来开发,设计界面所见即所得。基于C++语言高效灵活。下面基于本人之前开发的一个小软件来说说。

以下是软件运行时的效果:

实现以上界面窗口需要对原始窗口做如下改造
1. 界面去掉原始标题栏
2. 标题栏自定义,背景透明和工具栏共用背景图片
3. 背景图片横向拉申,做出渐变效果
4. 自定义控制按钮(最大化、最小化、恢复、关闭)
5. 窗口套用mask变为圆角


设置窗口为无边框风格

WidgetMain::WidgetMain(QWidget *parent) :QWidget(parent),ui(new Ui::WidgetMain)
{setWindowFlags(Qt::FramelessWindowHint);setWindowIcon(QIcon(":/Images/Images/Statistics.png"));ui->setupUi(this);ui->btnRestore->hide();

移动最大化最小化控制条到右上脚去

   QRect rt = ui->controlBar->geometry();ui->controlBar->move(size().width() - rt.width(),rt.top());

连接最大化、最小化的事件处理函数

   connect(ui->btnClose,SIGNAL(clicked()),this,SLOT(close()));connect(ui->btnMin,SIGNAL(clicked()),this,SLOT(showMinimized()));connect(ui->btnExit,SIGNAL(clicked()),this,SLOT(close()));

设置窗口Mask为圆角

 MaskWindow();

以下是该方法的定义

void WidgetMain::MaskWindow()
{//生成一张位图QBitmap objBitmap(size());//QPainter用于在位图上绘画QPainter painter(&objBitmap);//填充位图矩形框(用白色填充)painter.fillRect(rect(),Qt::white);painter.setBrush(QColor(0,0,0));//在位图上画圆角矩形(用黑色填充)painter.drawRoundedRect(this->rect(),6,6);//使用setmask过滤即可setMask(objBitmap);}

关于界面的鼠标拖拽处理,当鼠标按下时记下当前位置,在移动事件里调用移动方法move移动一段位移距离。

void WidgetMain::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton) {move(event->globalPos() - m_dragPosition);event->accept();}}
void WidgetMain::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {m_dragPosition = event->globalPos() - frameGeometry().topLeft();event->accept();}}

最大化和恢复事件处理

void WidgetMain::on_btnMax_clicked()
{QRect rt = ui->controlBar->geometry();m_RestoreRect = this->geometry();QDesktopWidget * desktop = QApplication::desktop();QRect MaxRect = QRect(0,0,desktop->width(),desktop->height()); //qApp->desktop()->availableGeometry();setGeometry(MaxRect);m_bMax = true;ui->btnMax->hide();ui->btnRestore->show();ui->controlBar->move(size().width() - rt.width(),rt.top());MaskWindow();}

最大化处理 ,记录下当前窗口位置信息m_RestoreRect,调整窗口位置大小,调整控制条位置,修改按钮状态,再执行窗口mask操作

void WidgetMain::on_btnRestore_clicked()
{QRect rt = ui->controlBar->geometry();setGeometry(m_RestoreRect);ui->btnRestore->hide();ui->btnMax->show();m_bMax = false;ui->controlBar->move(size().width() - rt.width(),rt.top());MaskWindow();
}

恢复处理 , 把上次记录的窗口位置信息在设置回来 setGeometry(m_RestoreRect);,调整其它参数。

基于Qt开发PC客户端软件相关推荐

  1. 基于QT开发PC端文件加密工具

    基于QT开发PC端文件加密工具 1.客户需求 某案子.该方案,通过外挂TF卡实现,本地教育资源的调取使用.按客户需求,把TF卡内的内容进行加密,并在软件中写好解密,确保资源文件只能在教育机中才能正常播 ...

  2. 关于PC客户端软件开发的一些思考

    PC客户端(Win/Mac)开发四年的从业者来回答一波,PC客户端广义的应该指的是所有运行在个人电脑上的软件(包括Mac.Linux.Win)这三类主流的操作系统. 它的前景好坏的话,主要的对比对象, ...

  3. 【C++课程设计】期末大作业 - 基于Qt开发的中国象棋软件

    1 题目 基于Qt的中国象棋软件开发 本博客只是简略的描述论文的大致结构.框架,以及软件开发的大致过程.有兴趣的参考原文档资料. 2总体设计与主要功能 2.1概述 中国象棋是起源于中国的一种棋,属于二 ...

  4. 基于Qt的桌面客户端组件化框架DT 开源啦

    这个是本人在工作中基于QT开发的组件化桌面开发框架,目前打算开源出来提供给大家,节省大家的开发时间和效率,希望对大家的开发有所帮助,也欢迎提出意见和改进建议 1. 为什么开源DT框架 DT框架,本身就 ...

  5. PC客户端软件升级方式简史

    在windows8之前,微软的Windows平台一直没有提供一个想苹果的AppStore或者Linux的包管理这样的统一软件管理工具.所以Windows下的软件安装.升级.卸载的事情一般都是软件自己去 ...

  6. 【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)

    [QT/C++]基于QT开发的一款关于A-SOUL的视频播放器(附源码) 前言 一.软件使用说明 1.运行软件的界面如下 2.操作软件的步骤 二.软件设计说明 1.UI界面的设计 2.主代码中的部分函 ...

  7. 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...

    用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...

  8. 基于QT开发的多媒体播放器

    基于QT开发的多媒体播放器 描述: 使用QT软件设计一个多媒体播放器,实现视频及音乐的播放,暂停,快进,快退,音量的调整. 歌词的实时显示和视频全屏播放等基本功能. 功能: 1.音乐系统:提供播放.暂 ...

  9. Qt开发上位机软件建立经典蓝牙通讯

    Qt开发上位机软件建立经典蓝牙通讯 之前做了一个具有经典蓝牙通讯功能的Windows上位机软件,在网上学习了相关博客以及参考了官方经典蓝牙例程之后,总结出了使用Qt建立经典蓝牙通讯的步骤,附带相关源码 ...

最新文章

  1. Tensorflow—CNN应用于MNIST数据集分类
  2. php unset 多可以什么_php unset()销毁单个或多个变量
  3. android studio如何编译测试,Android Studio 进行单元测试完整教程
  4. Python 并发编程:PoolExecutor 篇
  5. matlab frontier,使用Matlab计算Efficient frontier
  6. NHibernate(一) 转自止于至善
  7. /xiaolei.php|martin_经典开源PHP项目
  8. 微信小程序登录流程 微信登录
  9. vue接口总是请求超时_解决在vue中axios请求超时的问题
  10. gif动态图如何制作?
  11. mysql和pg数据库表备份及还原
  12. 基于RFM模型的用户价值分析——PythonTableau
  13. Hotmail邮箱的POP和SMTP配置
  14. 什么是java集合,java集合有几类?
  15. 关于JavaScript中的date和java中的date差14小时问题
  16. C++ VS2019 缓存区溢出和读取数据无效的警告
  17. Excel 数字按长度补0,并转换为文本
  18. 如何通过喂养菌群产生丁酸调节人体健康
  19. toastr的介绍和使用
  20. Java主人喂猫吃鱼的实验总结,小猫吃鱼的作文4篇

热门文章

  1. 短视频正当时,如何让你的App快速构建视频创作能力?
  2. 可下载3d模型的网站
  3. 专题一:解读直播行业黑产及其产业链(上)
  4. Windows下OpencvSharp编译CUDA 五、后记
  5. 三百左右蓝牙耳机选哪个?300左右无线蓝牙耳机推荐
  6. 面向对象分析(实验三)
  7. Linux系统运维之系统的启动流程 (转)
  8. 教育类app开发的基本流程是什么?
  9. 轮履式农业机器人_轮履复合式农业机器人越避障控制研究
  10. ARM64基础13:ARM64的异常处理之中断处理(以树莓派4采用的BCM2711芯片为例)