Qt之容器控件(QDockWidget)

简述

QDockWidget类提供了一个小部件,它可以停靠在QMainWindow内,也可以作为桌面上的顶层窗口浮动。

功能详述

QDockWidget提供了铆接(停靠)控件的概念,也叫做工具窗口。铆接窗口是QMainWindow中心控件的辅助窗口,停放在QMainWindow的铆接区域,铆接区域如下所示:

铆接部件可以在铆接区域移动,或者浮动。QDockWidget提供了API来控制铆接部件的可移动区域。

铆接部件由标题栏和内容主体组成。标题栏显示铆接部件的窗口标题。

QDockWidget用作其子窗口小部件的包装,该子窗口小部件由setWidget()设置。自定义尺寸参考、最大最小尺寸、尺寸策略都应当在子控件中实现。QDockWidget会尊重这些尺寸设置,并调整自身以适应子控件与标题栏。由于铆接部件的变化很大程度上取决于它是否被铆接,因此,尺寸策略不应当被设置在QDockWidget上。

使用

效果

上面的例子展示了铆接部件的基本效果。QTextEdit作为QMainWindow的中心控件,铆接部件可以停靠在QTextEdit的四周。

源码

    QTextEdit *textEdit = new QTextEdit;

    QMainWindow *mainWindow = new QMainWindow;

    QDockWidget *dock = new QDockWidget(tr("Customers"), this);

    QListWidget *customerList = new QListWidget(dock);
    customerList->addItems(QStringList()
            << "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton"
            << "Jane Doe, Memorabilia, 23 Watersedge, Beaton"
            << "Tammy Shea, Tiblanka, 38 Sea Views, Carlton"
            << "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal"
            << "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston"
            << "Sally Hobart, Tiroli Tea, 67 Long River, Fedula");
    dock->setWidget(customerList);
    mainWindow->addDockWidget(Qt::RightDockWidgetArea, dock);

    mainWindow->setCentralWidget(textEdit);


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(mainWindow);

    this->setLayout(gridLayout);

注意: 铆接部件只能放在QMainWindow中,这里的最上层类直接继承自QWidget,所以要实例化一个QMainWindow,如果上层类继承自QMainWindow,则可以直接添加铆接部件。

常用设置

设置子控件

铆接控件一般都要设置一个子控件作为核心内容,设置方法如下

dock->setWidget(customerList);

设置允许停靠的区域

dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//只允许左右停靠

默认值是Qt::AllDockWidgetAreas,即,可以停靠在任何区域。其它值如下所示

常量
Qt::LeftDockWidgetArea0x1
Qt::RightDockWidgetArea0x2
Qt::TopDockWidgetArea0x4
Qt::BottomDockWidgetArea0x8
Qt::AllDockWidgetAreasDockWidgetArea_Mask
Qt::NoDockWidgetArea0

设置铆接部件行为特性

用于设置铆接部件是否可移动、可关闭、可浮动。默认情况下三种行为都允许。

dock->setFeatures(QDockWidget::DockWidgetClosable)

其它常量如下

常量描述
QDockWidget::DockWidgetClosable0x01停靠小部件可以关闭。在某些系统上,dock小部件在浮动时始终具有关闭按钮(例如,在MacOS 10.5上)。
QDockWidget::DockWidgetMovable0x02用户可以在扩展坞之间移动扩展坞小部件。
QDockWidget::DockWidgetFloatable0x04停靠小部件可以与主窗口分离,并作为独立窗口浮动。
QDockWidget::DockWidgetVerticalTitleBar0x08停靠小部件的左侧显示垂直标题栏。这可用于增加QMainWindow中的垂直空间。
QDockWidget::AllDockWidgetFeatures前三个的值或运算可移动、可关闭、可浮动
QDockWidget :: NoDockWidgetFeatures0x00铆接控件不可移动、不可关闭、不可浮动。

让窗口浮动

dock->setFloating(true)

自定义标题栏

自定义一个标题栏(自定义方法见Qt帮助文档),然后通过下列方法放到铆接部件上

dock->setTitleBarWidget(titleBar);

信号槽

信号

名称描述
allowedAreasChanged当可移动区域属性变化时触发,参数为新的可移动区域参数
dockLocationChanged铆接部件位置发生变化时触发,参数为铆接部件新的位置参数
featuresChanged浮动属性变化时触发,浮动时传递true,否则传递false
visibilityChanged可见性发生变化时触发,可见时传递true,否则传递false

引用

[1] Qt 助手

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值