paip 提升用户体验---c++ qt自定义窗体 1 ---标题栏的绘制

2023-11-07 15:38

本文主要是介绍paip 提升用户体验---c++ qt自定义窗体 1 ---标题栏的绘制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

 

效果图:

 

 

 

作者Attilax ,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.csdn.net/attilax

 

第一步:去掉系统默认标题栏 1

第2步:添加自定义标题栏以及最小化,最大化.关闭按钮...还有左边的窗体小图标.. 2

第3步:添加标题栏拖曳事件.. 2

第4步: 最大化,最小化,  .关闭按钮事件: 3

5窗体图标点击事件.. 4

6标题栏右击菜单事件 4

7标题栏双击事件 4

8边框拖曳更改大小事件 (待续) 4

9绘制自定义边框 (待续) 4

 

 

第一步:去掉系统默认标题栏

构造函数里添加以下代码.

  setWindowFlags( Qt::FramelessWindowHint|  Qt::WindowSystemMenuHint

 | Qt::WindowMinimizeButtonHint);

 

Qt::FramelessWindowHint指明孪不要系统标题栏以及边框..当然附加在他们上面的事件也就没兰,需要重写..

Qt::WindowSystemMenuHint 指明可以在任务栏点击事件以及右键菜单.. 这个要有..

Qt::WindowMinimizeButtonHint   指明可以最小化,最大化.

 

 

第2步:添加自定义标题栏以及最小化,最大化.关闭按钮...还有左边的窗体小图标..

/

标题栏背景图片png格式一张..使用photoshop处理一下,我使用的是7.0 绿化版...14M..很不错..高度32pix

最小化,最大化.关闭按钮图片需要..还需要对应的激活状态图片,压下状态图片,共9张..大小32像素..

左边的窗体小图标一张..32像素..

添加标题栏,我是使用lable控件实现的..添加上K,设置个背景走ok兰..

最小化,最大化.关闭按钮,左边的窗体小图标,全部使用QPushButton,设置好mask,以及背景,请参考不规则按钮设置的方法..

使用qss设置好最小化,最大化.关闭按钮的激活状态,press状态下的图片切换..

 

第3步:添加标题栏拖曳事件..

为了简单的,我直接使用了悬浮窗的拖曳技术.袖管拖曳窗体哪里都可以拖曳..

void IrregularWidget::mousePressEvent(QMouseEvent *event)

{

   //按住左键可以托动窗口,按下右键关闭程序

   if(event->button() == Qt::LeftButton)

   {

       m_CurrentPos = event->globalPos() - frameGeometry().topLeft();

       qDebug()<<"---mouse left ---";

       event->accept();

   }

 

}

 

void IrregularWidget::mouseMoveEvent(QMouseEvent *event)

{

   //resize window

/*    if (event->buttons() && Qt::LeftButton)

   {}

   else   */

   if (event->buttons() && Qt::LeftButton)

   {

       move(event->globalPos() - m_CurrentPos);

       event->accept();

   }

}

 

 

第4步: 最大化,最小化,  .关闭按钮事件:

//close

void MainWindowList::on_pushButton_5_clicked()

{

close();

}

//max

void MainWindowList::on_pushButton_6_clicked()

{

//最大化

 

if(this->isMaximized())

   this->showNormal();   //恢复

else

   showMaximized();

 

}

//最小化窗口函数

void MainWindowList::on_pushButton_7_clicked()

{

   //系统自定义的最小化窗口函数

   showMinimized();

}

 

 

 5窗体图标点击事件..

6标题栏右击菜单事件

7标题栏双击事件

8边框拖曳更改大小事件 (待续)

9绘制自定义边框 (待续)

 

 

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

这篇关于paip 提升用户体验---c++ qt自定义窗体 1 ---标题栏的绘制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/364610

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑