简述
通过qss自定义外观后,发现标题栏的外观未发生变化,与整体的风格不融洽。因为程序的最外层边框加载的是系统本地的窗口。为了使风格统一,我们可以自定义一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮,并控制其风格与主界面一致。
网上有很多Qt自定义标题栏的代码。这里分享一个我觉得较好的自定义标题栏。与其他代码不同,其把对主窗口的相关处理事件都封装在标题栏类中,使用的时候,通过安装事件监听器来完成对主窗的控制。效果如下图所示:
系统边框
自定义边框
上面是对对话框自定义标题栏,使用时,除了安装监听器,需要把标题栏放置在对话框布局的顶端
[cpp] view plain copy
- //自定义标题栏
- setWindowFlags(Qt::FramelessWindowHint | windowFlags());
- TitleBar *pTitleBar = new TitleBar(this);
- installEventFilter(pTitleBar);
- qobject_cast(this->layout())->insertWidget(0,pTitleBar);
这里额外说明是对QmainWindow添加自定义边框,在对QmainWindow类调用this->layout返回的是空,得不到其布局,QMainWindow的布局是已经定义好的,不能够进行改变。为了能添加自定义边框,在外面加了一个QWidget. 将自定义标题栏和QMainWindow添加到QWidget中。同时为了使得Qmainwindow能够嵌入到QWidget中,需要添加如下设置:
[cpp] view plain copy
- this->setWindowFlags(Qt::Widget);
效果:
参考文献:
1 自定义标题栏
2 自定义窗体缩放
3 setGeometry: Unable to set geometry