QDockWidget停靠窗口

Qt构建停靠窗口使用的是QDockWidget类。

窗口特性

停靠窗口特性可以通过setFeatures(QDockWidget::AllDockWidgetFeatures)方法进行设置:

常亮 描述
QDockWidget::DockWidgetClosable 0x01 窗口可关闭
QDockWidget::DockWidgetMovable 0x02 窗口可移动
QDockWidget::DockWidgetFloatable 0x04 停靠窗口可以与主窗口分离,作为独立窗口浮动
QDockWidget::DockWidgetVerticalTitleBar 0x08 停靠窗口在左侧显示垂直标题栏。 用于增加QMainWindow中的垂直空间。
QDockWidget::AllDockWidgetFeatures DockWidgetClosable /DockWidgetMovable / DockWidgetFloatable (不建议使用)可以关闭,移动和浮动停靠窗口
QDockWidget::NoDockWidgetFeatures 0x00 停靠窗口不可关闭、移动、浮动

停靠区域

通过setAllowedAreas(Qt::DockWidgetAreas areas)设置窗口停靠区域:

常亮
Qt::LeftDockWidgetArea 0x1
Qt::RightDockWidgetArea 0x2
Qt::TopDockWidgetArea 0x4
Qt::BottomDockWidgetArea 0x8
Qt::AllDockWidgetAreas DockWidgetArea_Mask
Qt::NoDockWidgetArea 0

隐藏与显示

窗口的隐藏与显示可通过hide()、show()实现,判断窗口的显示与隐藏状态可用isHidden()。

示例

环境:Win10+VS2015+Qt5.9.7

首先创建一个Qt GUI Application。工程名:myDockWidget。然后,在资源文件中添加一幅图像资源:

头文件

myDockWidget.h:

#pragma once#include <QtWidgets/QMainWindow>
#include <QHBoxLayout>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QSpinBox>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>#include "ui_myDockWidget.h"#pragma execution_character_set("utf-8")class myDockWidget : public QMainWindow
{Q_OBJECTpublic:myDockWidget(QWidget *parent = Q_NULLPTR);private:Ui::myDockWidgetClass ui;
};

源文件

myDockWidget.cpp:

在停靠窗口中添加一些控件资源。

#include "myDockWidget.h"myDockWidget::myDockWidget(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//显示——停靠窗口QLabel *m_qLabel = new QLabel("", this);m_qLabel->setAlignment(Qt::AlignCenter);m_qLabel->setStyleSheet("border-image: url(:/myDockWidget/Resources/image.jpg);");m_qLabel->setMinimumWidth(500);m_qLabel->setMinimumHeight(300);QHBoxLayout *hlayout0 = new QHBoxLayout;hlayout0->addWidget(m_qLabel);QGridLayout *vlayout0 = new QGridLayout;vlayout0->addLayout(hlayout0, 0, 0);QWidget *cornerWidget0 = new QWidget;cornerWidget0->setLayout(vlayout0);setCentralWidget(cornerWidget0);//调试——停靠窗口QDockWidget *debugging = new QDockWidget("调试", this);//构建停靠窗口,指定父类debugging->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);//设置停靠窗口特性,可移动,可关闭debugging->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置可停靠区域为主窗口左边和右边debugging->setMinimumWidth(200);QTextEdit *debuggingEdit = new QTextEdit("调试——停靠窗口);debugging->setWidget(debuggingEdit);addDockWidget(Qt::RightDockWidgetArea, debugging);//测试——停靠窗口QDockWidget *dw3 = new QDockWidget("测试", this);//构建停靠窗口,指定父类dw3->setFeatures(QDockWidget::DockWidgetMovable);//设置停靠窗口特性,可移动,可关闭dw3->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置可停靠区域为主窗口左边和右边QHBoxLayout *hlayout31 = new QHBoxLayout;QPushButton *runPushButton = new QPushButton(tr("运行"));QPushButton *stopPushButton = new QPushButton(tr("停止"));hlayout31->addWidget(runPushButton);hlayout31->addWidget(stopPushButton);QGridLayout *vlayout3 = new QGridLayout;vlayout3->addLayout(hlayout31, 0, 0);QWidget *cornerWidget3 = new QWidget;cornerWidget3->setLayout(vlayout3);dw3->setWidget(cornerWidget3);dw3->setMaximumHeight(100);dw3->setMaximumWidth(300);addDockWidget(Qt::LeftDockWidgetArea, dw3);}

效果如图:

为停靠窗口中的控件添加槽函数

头文件

myDockWidget.h:

#pragma once#include <QtWidgets/QMainWindow>
#include <QHBoxLayout>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QSpinBox>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>
#include <QMessageBox>#include "ui_myDockWidget.h"#pragma execution_character_set("utf-8")class myDockWidget : public QMainWindow
{Q_OBJECTpublic:myDockWidget(QWidget *parent = Q_NULLPTR);private:Ui::myDockWidgetClass ui;QPushButton *runPushButton;private slots:void runPushButtonSlot();};

源文件

myDockWidget.cpp:

#include "myDockWidget.h"myDockWidget::myDockWidget(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//显示——停靠窗口QLabel *m_qLabel = new QLabel("", this);m_qLabel->setAlignment(Qt::AlignCenter);m_qLabel->setStyleSheet("border-image: url(:/myDockWidget/Resources/image.jpg);");m_qLabel->setMinimumWidth(500);m_qLabel->setMinimumHeight(300);QHBoxLayout *hlayout0 = new QHBoxLayout;hlayout0->addWidget(m_qLabel);QGridLayout *vlayout0 = new QGridLayout;vlayout0->addLayout(hlayout0, 0, 0);QWidget *cornerWidget0 = new QWidget;cornerWidget0->setLayout(vlayout0);setCentralWidget(cornerWidget0);//调试——停靠窗口QDockWidget *debugging = new QDockWidget("调试", this);//构建停靠窗口,指定父类debugging->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);//设置停靠窗口特性,可移动,可关闭debugging->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置可停靠区域为主窗口左边和右边debugging->setMinimumWidth(200);QTextEdit *debuggingEdit = new QTextEdit("调试——停靠窗口");debugging->setWidget(debuggingEdit);addDockWidget(Qt::RightDockWidgetArea, debugging);//测试——停靠窗口QDockWidget *dw3 = new QDockWidget("测试", this);//构建停靠窗口,指定父类dw3->setFeatures(QDockWidget::DockWidgetMovable);//设置停靠窗口特性,可移动,可关闭dw3->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置可停靠区域为主窗口左边和右边QHBoxLayout *hlayout31 = new QHBoxLayout;runPushButton = new QPushButton(tr("运行"));runPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");QObject::connect(runPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));QPushButton *stopPushButton = new QPushButton(tr("停止"));hlayout31->addWidget(runPushButton);hlayout31->addWidget(stopPushButton);QGridLayout *vlayout3 = new QGridLayout;vlayout3->addLayout(hlayout31, 0, 0);QWidget *cornerWidget3 = new QWidget;cornerWidget3->setLayout(vlayout3);dw3->setWidget(cornerWidget3);dw3->setMaximumHeight(100);dw3->setMaximumWidth(300);addDockWidget(Qt::LeftDockWidgetArea, dw3);}void myDockWidget::runPushButtonSlot()
{runPushButton->setStyleSheet("background-color: rgb(255, 100, 100);");QMessageBox::information(this, "提示:", "开始运行");
}


QT界面:QDockWidget停靠窗口使用小结相关推荐

  1. 【QT】QT从零入门教程(六):QDockWidget停靠窗口

    QDockWidget   上节我们引出了QDockWidget的概念,这节进行讲解并加以引用.   常用函数:   1.addDockWidget:添加停靠控件,用于指定或更改停靠控件的位置以及方向 ...

  2. Qt中QDockWidget停靠窗之设置布局比例,保存布局和恢复布局

    新建一个QMainWindow的空项目 (懒得看又臭又长直接到最后复制整段代码) 先新建一个QMainWindow的空项目,不使用.ui文件. 这时候mainwindow.h文件中没有成员变量 #pr ...

  3. 【转】QDockWidget 停靠窗口和工具栏

    转:http://blog.csdn.net/a649518776/article/details/6636490 下面用代码实现上面窗口的设计: 1.建立项目时基类选择QMainWindow,取消G ...

  4. Qt模仿VS停靠窗口(一)

    前言 众所周知,停靠窗口可以实现任意拖动效果,本文重点在于如何利用Qt制作与Visual Studio相似的带有停靠方向标及停靠区域预览的的停靠窗口框架. 百度网盘体验地址: 链接:https://p ...

  5. QT界面:tabWidget选项卡使用小结

    环境:Win10+VS2015+Qt5.9.7 首先创建一个Qt GUI Application,在GUI上拖拽一个tabWidget,对象名为tabWidget.系统会默认建立两个选项卡,如果不用可 ...

  6. Qt Widgets 之 QDockWidget(停靠窗口)

    目录 什么是停靠窗口 如何添加停靠窗口 QDockWidget::setWidget() QMainWindow::addDockWidget() 设置停靠选项 (Options) AnimatedD ...

  7. Qt(三)窗口分割、停靠、堆叠

    文章目录 一.窗口分割 QSplitter 二.窗口停靠 QDockWidget 三.窗口堆叠 QStackedWidget 演示实例: 创建QMainWindow应用, 无UI文件 一.窗口分割 Q ...

  8. c语言mfc窗口跳到下个窗口,MFC停靠窗口实现(CDockablePane)

    工作中编写MFC界面程序时用到了停靠窗口,为了避免之后用到时再去查询,这里记录下. 步骤 1.定义一个继承自CDockablePane的类 Class CDockableTest : public C ...

  9. QT--QDockWidget 停靠窗口

    #include "mainwindow.h" #include<QDockWidget> #include<QTextEdit> MainWindow:: ...

最新文章

  1. 使用Python、OpenCV计算轮廓的中心
  2. mysql存储过程表_mysql 存储过程,表
  3. 居然以反战的名义,利用开源工具包“投毒”!
  4. python人脸识别毕业设计-用python3.6在电脑上实现用摄像头来人脸识别源程序
  5. LVS(6)——NAT准备工作
  6. php投票系统制作,php简单的投票系统[原创]
  7. HTML的相关路径与绝对路径的问题---通过网络搜索整理
  8. linux使用gpio开一个线程,LINUX的gpio_request_one作用
  9. WindowsAPI----AttachThreadInput使用
  10. 研究生阅读管理文献---我阅读科研文献的一些做法
  11. 读《世界是数字的》有感③
  12. SpringMVC 异常记录
  13. 通达信资金净流入公式_通达信指标公式:资金净流入,监控资金流入流出,分享...
  14. vue使用ionic图标_Ionic团队的Vue图标集组件
  15. FAQ详解“Meltdown和Spectre”问题,接踵而来的“Skyfall和Solace”是否仅是骗局?
  16. 计算机中丢失d3dx9 43.dll,游戏提示“没有找到d3dx9_43.dll”的解决方法
  17. 查看各大网站服务器操作系统
  18. Chatopera 张凯:创业的信念,为了小家和大家
  19. nextdate函数白盒测试问题 软件测试_NextDate函数测试用例
  20. Web登录小案例(含验证码登录)

热门文章

  1. C语言-老鼠走迷宫(深度寻路算法)
  2. 农村有哪些有前景又稳妥的小本创业项目?
  3. python 同花顺thstrader_Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)...
  4. java注释和注解_注释注解JAVA注解
  5. 计算机视觉在哪发表论文比较好,英才学院本科生在计算机视觉领域顶级会议ECCV发表论文...
  6. markdown+Pygments高亮代码
  7. 关于实现将excel表中的数据以文件上传的方式添加到数据库中
  8. php 门户网站,PHP的CMS系统整理
  9. 基于SSM的亲子活动平台的搭建与实现(源码+数据脚本+论文+技术文档)
  10. python爬取财富