Qt软件开发文档6---dockWidget自定义标题栏
来源:互联网 发布:如何加强网络信息安全 编辑:程序博客网 时间:2024/05/20 00:50
Qt 自带的 QDockWidget 的标题栏只有两个按钮, 浮动按钮和 关闭按钮。
往往满足不了需求,只适合需要我们自定义一个标题栏。
如下 标题栏实现了自定义的最小化,最大化,关闭按钮 ,接收到dock传来的标题信息
直接上代码:
1.声明一个MyDockTitleBar类
MyDockTitleBar.h
#ifndef MYDOCKTITLEBAR_H#define MYDOCKTITLEBAR_H#include <QSize>#include <QDockWidget>#include <QMouseEvent>#include <QWidget>#include <QPainter>#include <QPaintEvent>#include <QStyle>class MyDockTitleBar : public QWidget{ Q_OBJECTpublic: MyDockTitleBar(QString dockName,QWidget *parent = 0); QSize sizeHint() const { return minimumSizeHint(); } QSize minimumSizeHint() const; int width; QString name;//receive parent,s nameprotected: void paintEvent(QPaintEvent *event);//paint titleBar void mousePressEvent(QMouseEvent *event); //mouse pressprivate: QPixmap minPix, closePix, floatPix;};#endif // MYDOCKTITLEBAR_H
MyDockTitleBar.cpp
#include "myDockTitleBar.h"MyDockTitleBar::MyDockTitleBar(QString dockName,QWidget *parent): QWidget(parent){ //pixMap minPix = style()->standardPixmap(QStyle::SP_TitleBarMinButton); closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton); floatPix = style()->standardPixmap(QStyle::SP_TitleBarNormalButton); name = dockName;}//set TitleBar minimumSizeQSize MyDockTitleBar::minimumSizeHint() const{ return QSize(156, 24);}//绘制titleBarvoid MyDockTitleBar::paintEvent(QPaintEvent*){ QPainter painter(this); QRect rect = this->rect(); width = rect.width(); //drawPixmap painter.setPen(QPen(QColor(185, 185, 185), 2, Qt::SolidLine)); painter.setBrush(QBrush(QColor(218, 218, 218), Qt::SolidPattern)); painter.drawRect(rect.left(), rect.top(), rect.width(), rect.height()); painter.drawPixmap(rect.topRight() - QPoint(closePix.width() + 10, -6), closePix); painter.drawPixmap(rect.topRight() - QPoint(floatPix.width() + 10 + closePix.width() + 10, -6), floatPix); painter.drawPixmap(rect.topRight() - QPoint(floatPix.width() + 10 + minPix.width() + 10 + closePix.width() + 10, -3), minPix); //drawText painter.setPen(QPen(Qt::black, 1, Qt::SolidLine)); painter.setBrush(Qt::NoBrush); painter.drawText(rect.left() + 10, rect.top()-2, rect.width(), rect.height(), Qt::AlignVCenter, name); //draw Blank area painter.setPen(Qt::NoPen); painter.setBrush(QBrush(QColor(240, 240, 240), Qt::SolidPattern));//设置画刷形式 painter.drawRect(rect.left(), rect.top() + 19, rect.width(), 5);}void MyDockTitleBar::mousePressEvent(QMouseEvent *event){ QPoint pos = event->pos(); QRect rect = this->rect(); QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget()); Q_ASSERT(dw != 0); //in this case,pix width = 10,pix spacing = 10 int right = rect.right() - pos.x(); QWidget *widget = dw->widget(); if (right >= 10 && right <= 20) { event->accept(); dw->close(); } else if (right >= 30 && right <= 40){ event->accept(); if (widget->isVisible()){ } else { widget->show(); //dw setMinimumWidth initialize dw->setMinimumWidth(156); } } else if (right >= 50 && right <= 60){ event->accept(); if (widget->isVisible()){ //click minPix ,dw setMinimumWidth dw->setMinimumWidth(width); widget->hide(); } else { } }}
在窗口中调用
dock[0] = new QDockWidget(tr("TreeView"),this); dock[0]->setFeatures(QDockWidget::AllDockWidgetFeatures);//所有属性 dock[0]->setAllowedAreas(Qt::LeftDockWidgetArea);//设置允许停靠的窗口位置 dllName = "treeDll.dll"; funcName = "showTree"; MyDockTitleBar *titleBar0 = new MyDockTitleBar(tr("TreeView"), dock[0]); dock[0]->setTitleBarWidget(titleBar0); QWidget *tree = new QWidget(dock[0]); tree = setWidget(dllName,funcName); tree->setMinimumHeight(130); dock[0]->setWidget(tree); addDockWidget(Qt::LeftDockWidgetArea,dock[0]);
本文借鉴:https://www.oschina.net/code/snippet_1029551_20242
1 0
- Qt软件开发文档6---dockWidget自定义标题栏
- Qt软件开发文档17---自定义messagebox窗口
- Qt 个性化标题栏,自定义标题栏
- ...Qt实现--自定义标题栏
- 自定义 Qt 窗口标题栏
- QT 自定义标题栏
- qt 自定义标题栏
- Qt 自定义标题栏
- Qt:自定义标题栏(QMainWindow)
- qt创建自定义标题栏
- QT中dockWidget详细教程
- Qt软件开发文档19---无边框窗体的自定义移动
- Qt软件开发文档10---数据传递
- Qt软件开发文档11---更新数据
- Qt软件开发文档12---scrollBar样式
- Qt 之 自定义窗口标题栏
- C++--Qt软件开发--自定义信号槽
- Qt软件开发文档1---Cmake编译QT程序
- poj3616
- pycharm激活码(注册码)
- 响应者链条
- 1002. A+B for Polynomials (25)
- 读《统计自然语言处理》——文本分析
- Qt软件开发文档6---dockWidget自定义标题栏
- Oracle中快速导入导出数据库的几种方式
- C语言复习笔记 1
- maven ClassNotFoundException: ContextLoaderListener
- POD------报错 “Generating Pods project Abort trap 6"
- Android 获取手机联系人信息
- Java面试大全(四)
- 优秀开源项目学习(cms、商城、邮件、微信等)
- 回调函数