qt创建自定义标题栏
2017-11-13 09:57
1216 查看
问题描述:利用QT自带的QDialog或QMainwindow创建的窗口,这些窗口的标题栏都有固定的形式,较难修改。
我们希望创建自定义形式的标题栏,实现修改背景图片图标、在特定地方加上按钮等功能。
实现方法:创建QWidget,在QWidget上实现自定义标题栏的样式,在其上实现鼠标拖动事件(Qt重新实现QMouseEvent实现自定义窗口可拖动);将主窗口修改为QFrameLess形式(即没有标题栏的形式),用QVLayout将这个标题栏widget加入到主窗口的布局中。
具体实现:
(1)创建继承QWidget的界面titlebar,可以将它设计为任何形式的自定义标题栏。
(2)在主窗口程序mainwindow.cpp中设置窗口为FramelessWindowHint形式,即没有标题栏的形式;在通过QVBoxLayout将标题栏和mainwindow中的其他部件拼接到一起;在maiwindow类中通过重新实现QMouseEvent实现主窗口的可拖动(鼠标事件的实现参考:Qt重新实现QMouseEvent实现自定义窗口可拖动)。
(3)另外需要注意的是:自定义标题栏中左上角通常都有 最大化、最小化和关闭按钮。 这些按钮需要在创建titlebar界面类时自己创建,并且用QT的信号槽机制,使用connect函数,将他们的clicked信号连接到mainwindow的showMaximized()、showMinimized()和close()槽函数。
我们希望创建自定义形式的标题栏,实现修改背景图片图标、在特定地方加上按钮等功能。
实现方法:创建QWidget,在QWidget上实现自定义标题栏的样式,在其上实现鼠标拖动事件(Qt重新实现QMouseEvent实现自定义窗口可拖动);将主窗口修改为QFrameLess形式(即没有标题栏的形式),用QVLayout将这个标题栏widget加入到主窗口的布局中。
具体实现:
(1)创建继承QWidget的界面titlebar,可以将它设计为任何形式的自定义标题栏。
(2)在主窗口程序mainwindow.cpp中设置窗口为FramelessWindowHint形式,即没有标题栏的形式;在通过QVBoxLayout将标题栏和mainwindow中的其他部件拼接到一起;在maiwindow类中通过重新实现QMouseEvent实现主窗口的可拖动(鼠标事件的实现参考:Qt重新实现QMouseEvent实现自定义窗口可拖动)。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setWindowFlags(Qt::FramelessWindowHint); QWidget *wd = new QWidget(this); QVBoxLayout *layout_all = new QVBoxLayout; layout_all->setContentsMargins(0,0,0,0); layout_all->setSpacing(0); ... layout_all->addWidget(title); layout_all->addWidget(tabWidget); ... wd->setLayout(layout_all); this->setCentralWidget(wd); }
(3)另外需要注意的是:自定义标题栏中左上角通常都有 最大化、最小化和关闭按钮。 这些按钮需要在创建titlebar界面类时自己创建,并且用QT的信号槽机制,使用connect函数,将他们的clicked信号连接到mainwindow的showMaximized()、showMinimized()和close()槽函数。
相关文章推荐
- Qt 扁平化MainWindow以及自定义标题栏
- Qt 无边框窗口自定义标题栏
- [置顶] Qt 之 自定义窗口标题栏
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
- QT中的元对象系统(二):创建自定义的QT类型
- QT创建自定义窗口部件笔记
- Qt实用技巧:自定义窗口标题栏
- Qt自定义标题栏详细介绍(可拖动、放大缩小、关闭、标题栏具有渐变色)
- 【Qt】Qt之自定义界面(添加自定义标题栏)【转】
- 自定义QT标题栏和背景·边框
- qt信号槽之创建和连接自定义的槽
- Qt软件开发文档6---dockWidget自定义标题栏
- QT 中的元对象系统(二):创建自定义的QT类型
- QT4.7自定义标题栏简单实现
- Qt5中创建及使用自定义插件遇到的一些问题
- Qt 个性化标题栏,自定义标题栏
- Qt 在自定义标题栏长按鼠标左键来实现窗体移动
- vs2010 qt创建自定义部件类比如MyLineEdit
- QT中的元对象系统(二):创建自定义的QT类型
- ...Qt实现--自定义标题栏