zoukankan      html  css  js  c++  java
  • Qt自定义标题栏

    博客地址已更改,文章数量较多不便批量修改,若想访问源文请到 coologic博客 查阅,网址:www.coologic.cn

    如本文记录地址为 techieliang.com/A/B/C/ 请改为 www.coologic.cn/A/B/C/ 即可查阅

    版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
    本文标题:Qt自定义标题栏     本文地址:http://techieliang.com/2017/11/326/
    代码较多,显示效果不佳,建议原地址查看

    图片

    1. 标题栏的最大化、最小化、关闭按钮图标

    此类按钮建议使用QToolButton实现,图标可以自定义也可以用Qt自带的基础图标

    1. QToolButton *toolButton_mini;//最小化
    2. QToolButton *toolButton_max;//最大化
    3. QToolButton *toolButton_close;//关闭
    4. toolButton_mini->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMinButton));
    5. toolButton_max->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMaxButton));
    6. toolButton_close->setIcon(style()->standardPixmap(QStyle::SP_TitleBarCloseButton));

    将上述控件的点击事件与相应函数connect即可实现对应功能,注意最大化分为“最大化”和“还原”两个状态,且Qt提供了两个函数,不能直接connect。对应函数名分别为:

    1. showMinimized()
    2. showNormal()//还原
    3. showMaximized()//最大化
    4. close()

    2. QToolBar基本使用

    直接new一个控件,然后再窗口类中使用:

    1. addToolBar(this);

    实现此控件的添加

    通过QToolBar *a;a->asetMovable(false);实现禁止移动,同时取消工具栏左侧的移动标示按钮

    3. QToolBar控件局右显示

    一般关闭等按钮在右侧,QToolBar默认在左侧,可以在中间添加一个QWidget实现占位,从而保证按钮局右

    1. QWidget *toolBar_seat = new QWidget;
    2. toolBar_seat->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//长宽自动扩展
    3. addWidget(toolBar_seat);

    4. 双击标题栏最大化

    直接重写QObject的鼠标双击事件

    1. protected:
    2. void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) {
    3. if(Qt::LeftButton == event->button())
    4. MaximizeButtonClicked();//此处调用最大化/还原按钮点击槽
    5. event->ignore();
    6. }

    5. 窗口拖拽

    使用自定义标题栏以后,窗口将失去拖拽标题栏移动的功能,通过此步骤可以重现,同样重写对应鼠标事件

    1. virtual void mousePressEvent(QMouseEvent *event);
    2. virtual void mouseReleaseEvent(QMouseEvent *event);
    3. virtual void mouseMoveEvent(QMouseEvent *event);

    主要原理是在按下时记录按下状态及按下时的窗口坐标,抬起时取消状态,在鼠标移动时判断状态并根据当前坐标差进行移动。

    1. event->globalPos()//获取系统下全局坐标
    2. widget=window();//获取主窗口指针
    3. qwidget->move()//移动窗口

    具体源码请见GitHubQtWidgetsExamples

     
  • 相关阅读:
    [Leetcode]-- Largest Rectangle in Histogram
    Trapping Rain Water
    JNI和JNA性能比较
    Visual Studio开发Linux程序的方法
    Linux查看机器的硬件信息
    各语言的代码混淆工具
    类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast区别
    内存泄露的监测工具
    我们三十以后才明白
    我们三十以后才明白
  • 原文地址:https://www.cnblogs.com/techiel/p/7932310.html
Copyright © 2011-2022 走看看