Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)
转载:好儿郎~志在四方
详细描述:
QDockWidget类提供了一个窗体部件,其可以停靠在QMainWindow,或其本身作为一个在桌面上的顶级窗口(也就是父窗体)。
QDockWidget类提供了dock widget的概念,dock widget也就是我们熟悉的工具面板或者是工具窗口。
Dock window是放置在QMainWindow窗口周围的dock widget区域中的小部件。
图形描述如下:

Dock windows可以在几个区域中移动,或者是悬浮。该类提供的API允许程序员限制dock widgets的移动,悬浮和关闭,以及它可以被放置的区域。
成员类型:
QDockWidget对象包含一些特性,例如:移动、悬浮、关闭等等,这些都是枚举类型。

创建停靠窗体的流程:
- 创建一个QDockWidget对象的停靠窗体。
- 设置此停靠窗体的属性,通常可以使用setFeatures()以及setAllowedAreas()两种方法。
- 新建一个要插入停靠窗体的控件,常用的有QListWidget和QtextEdit。
- 将控件插入停靠窗体,调用QDockWidget()和setWidget()成员函数。
- 使用addDockWidget()方法,在MainWindow中加入此停靠窗体。
实例:
- 窗口1可以在左边和右边移动;
- 窗口2 没有相关的任何特性;
- 窗口3具有相关的所有特性;
步骤:
1、新建GUI应用,项目名自定义,基类选择QMainWindow,注意要取消"创建界面"复选框。
MainWindow类构造函数的说明:
class MainWindow : public QMainWindow
{
Q_OBJECT public:
MainWindow(QWidget *parent = );
~MainWindow();
};
2、MainWindow.cpp文件,也就是MainWindow类构造函数的实现,代码如下:
#include "mainwindow.h"
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("DockWidget"));
QTextEdit *text = new QTextEdit(this);
text->setText(tr("主窗口"));
text->setAlignment(Qt::AlignCenter);
setCentralWidget(text); QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);
dock->setFeatures(QDockWidget::DockWidgetMovable); //指定停靠窗体的样式,此处为可移动
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
QTextEdit *text1 = new QTextEdit();
text1->setText(tr("窗口一"));
dock->setWidget(text1);
addDockWidget(Qt::RightDockWidgetArea,dock); dock = new QDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget::NoDockWidgetFeatures); //没有相关的权限
QTextEdit *text2 = new QTextEdit();
text2->setText(tr("窗口二"));
dock->setWidget(text2);
addDockWidget(Qt::RightDockWidgetArea,dock); dock = new QDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //具有全部特性
QTextEdit *text3 = new QTextEdit();
text3->setText(tr("窗口三"));
dock->setWidget(text3);
addDockWidget(Qt::RightDockWidgetArea,dock); } MainWindow::~MainWindow()
{ }
3、主函数中的代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QFont>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font("楷体",,QFont::Bold);
a.setFont(font); MainWindow w;
w.show();
w.setFixedSize(,); //设置窗体为固定的大小,防止用户通过拖拽改变其大小
return a.exec();
}
4、运行效果如下:

Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)的更多相关文章
- Qt5—嵌入停靠窗口QDockWidget
参考链接:http://blog.csdn.net/summer_xiyer/article/details/12875899 新建一个GUI工程: QDockWidget是QWidget的子类,也等 ...
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...
- 停靠窗口QDockWidget
停靠窗口QDockWidget要和QMainWindow一起搭配使用的 样式: import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets ...
- 初识Qt布局管理器
Qt布局管理器的类有4种,它们分别为QHBoxLayout.QVBoxLayout.QGridLayout和QStackLayout.其中,QHBoxLayout实现水平布局,QVBoxLayout实 ...
- Qt 布局管理器
在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...
- PyQt主窗体设置停靠窗口(QDockWidget)的叠加顺序
PyQt提供了方便的停靠窗口控件,我们可以很方便的编写一个停靠窗口,代码和效果如下: # -*- coding: utf-8 -*-from PyQt4 import QtGui, QtCore cl ...
- Qt布局管理器的使用(一)
曾经对Qt的布局管理器掌握的还不清楚,今天特意学习了下.感觉收获还挺大的,特意拿出来和大家分享. 首先.要明确布局管理器的用处,及使我们的界面看起来比較整洁.美化.另外一点就是为了使我们的控件可以更随 ...
- Qt布局管理
原地址:http://blog.csdn.net/lastsoup/article/details/7028243 设计软件中各个部件的位置排列,有两种方法: 1.设置widget的在父窗体中的坐标和 ...
- Qt——布局管理器
教程地址 运行截图: 代码: #include "mainwindow.h" #include <QApplication> #include <QHBoxLay ...
随机推荐
- [LeetCode&Python] Problem 485. Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- OpenCV 自定义任意区域形状及计算平均值 方差
opencv中有矩形的Rect函数.圆形的circl函数等,那么任意形状怎么取呢?方法1:点乘,将其形状与图像进行点乘,求其形状对应的图像形状:方法2:用findContours函数得对应的形状区域, ...
- 20155208 实验四 Android开发基础
20155208 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握An ...
- Django--路由控制 ——URL反向解析
Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...
- Java 枚举(enum) 详解4种常见的用法
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 大师兄我又加上自己的理解,来帮助各位理解一下. 用法一:常量 在JDK1.5 之前,我们定义常 ...
- nginx实现反向代理,以反向代理tomcat为例
我的nginx和tomcat在同一台服务器上 我nginx安装的位置(因为我安装时使用的是./configure --prefix=/usr/etc/nginx)是/usr/etc/nginx,进入安 ...
- memsql kafka集成
memsql 可以加载s3,文件系统,kafka.hdfs 系统的数据,测试使用kafka 环境使用 docker-compose 运行,新版本的需要申请license,参考链接: https://w ...
- Complete Physics Platformer Kit 学习
using UnityEngine; /// <summary> /// 摄像机跟随玩家 /// </summary> public class CameraFollow : ...
- Add task bar to ubuntu
http://www.howtogeek.com/189819/how-to-add-a-taskbar-to-the-desktop-in-ubuntu-14.04/ sudo apt-get in ...
- 在外网访问家里面的电脑 和 DMZ
方法1:使用 MDZ ( demilitarized zone), 中文意思 非武装的区域.我们的家用电脑一般都在 路由器所在的 C类内网(192.X.X.X 的 ip).外网是不能直接访问内网的. ...