4.5 停靠窗口

作者: 223480235e8e | 来源:发表于2019-01-06 10:34 被阅读8次

今天小豆君来分享下Qt的停靠窗口QDockWidget。

QDockWidget可以停靠在QMainWindow内,或者作为桌面的顶层窗口。

QDockWidget一般会作为工具面板或实用工具窗口。比较类似与我们vs中的查找替换窗口。

image

QDockWidget由标题栏和内容区域组成。标题栏显示窗口标题、浮动按钮和关闭按钮。

4.5.1 属性

QDockWidget继承于QWidget。

image

1 allowedAreas 规定了悬停窗口可以被放置在哪些区域

  • Qt::LeftDockWidgetArea 可停靠在左侧

  • Qt::RightDockWidgetArea 可停靠在右侧

  • Qt::TopDockWidgetArea 可停靠在上侧

  • Qt::BottomDockWidgetArea 可停靠在下侧

  • Qt::AllDockWidgetAreas 可停靠在上下左右

  • Qt::NoDockWidgetArea 不可停靠

这个属性是QFlags<DockWidgetArea>的,也就是说彼此之间可以使用或运算符(|),取并集。

2 features 窗口标识

  • QDockWidget::DockWidgetClosable 可以关闭停靠窗口

  • QDockWidget::DockWidgetMovable 可以移动停靠窗口

  • QDockWidget::DockWidgetFloatable 停靠窗口可以跟主窗口分离,变成一个浮动窗口

  • QDockWidget::DockWidgetVerticalTitleBar 当停靠窗口在左侧时,标题可以垂直排列

  • QDockWidget::AllDockWidgetFeatures 可关闭,移动和浮动

  • QDockWidget::NoDockWidgetFeatures 不可关闭,移动和浮动

这个属性也是QFlags<DockWidgetFeature>的。

3 floating 是否处于浮动状态

为true时,其作为独立的窗口呈现给用户,而不是被停靠在QMainWindow上。

4 windowTitle 窗口标题

4.5.2 常用函数

  • setTitleBarWidget(QWidget* widget)

    为停靠窗口设置自定义标题栏。

  • setWidget(QWidget* widget)

    为停靠窗口设置自定义的内容区域。

4.5.3 示例

新建项目MainWindowDock,类名MainWindowDock,继承于QMainWindow

在ui界面拖入四个QDockWidget,并分别命名为上侧,下侧,左侧,右侧。

在中心窗口区域拖入一个QTabWidget,第一页标题为allowedAreas,并在里面拖入一个QListWidget,并新增四个item。同理编辑第二页features,如图二。

image image

mainwindow.h

#ifndef MAINWINDOWDOCK_H
#define MAINWINDOWDOCK_H
#include <QMainWindow>

namespace Ui {
class MainWindowDock;
}
class QListWidgetItem;
class MainWindowDock : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindowDock(QWidget *parent = 0);
    ~MainWindowDock();
private slots:
    void on_listWidget_areas_itemChanged(QListWidgetItem *item);
    void on_listWidget_features_itemChanged(QListWidgetItem *item);
private:
    Ui::MainWindowDock *ui;
};
#endif // MAINWINDOWDOCK_H

mainwindow.cpp

#include "mainwindowdock.h"
#include "ui_mainwindowdock.h"
MainWindowDock::MainWindowDock(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindowDock)
{
    ui->setupUi(this);
}
MainWindowDock::~MainWindowDock()
{
    delete ui;
}
void MainWindowDock::on_listWidget_areas_itemChanged(QListWidgetItem *item)
{
    //获取该item所代表的位置flag
    int row = ui->listWidget_areas->row(item);
    int flg = Qt::LeftDockWidgetArea << row;

    //获取停靠窗口原来的位置flag,并设置新的可放置区域
    QList<QDockWidget *> allDocks = findChildren<QDockWidget *>();
    foreach (QDockWidget* dock, allDocks)
    {
         Qt::DockWidgetAreas areas = dock->allowedAreas();
         areas.setFlag((Qt::DockWidgetArea)flg, item->checkState() == Qt::Checked);
         dock->setAllowedAreas(areas);
    }
}
void MainWindowDock::on_listWidget_features_itemChanged(QListWidgetItem *item)
{
    //获取该item所代表的停靠窗口标识
    int row = ui->listWidget_features->row(item);
    int flg = QDockWidget::DockWidgetClosable << row;

    //获取停靠窗口原来的窗口flag,并设置新的标识
    QList<QDockWidget *> allDocks = findChildren<QDockWidget *>();
    foreach (QDockWidget* dock, allDocks)
    {
         QDockWidget::DockWidgetFeatures features = dock->features();
         features.setFlag((QDockWidget::DockWidgetFeature)flg, item->checkState() == Qt::Checked);
         dock->setFeatures(features);
    }
}

现在我们来编译运行程序,并且勾选不同的属性,拖拽移动停靠窗口,看看都有哪些变化。

下图展示停靠窗口位于左侧并且标题垂直排列

image

下图展示左侧和右侧停靠窗口重叠在一起,上下侧窗口悬浮。

image

好的,今天的分享就到这里啦,最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者你有不懂的问题,关注公众号后,可加好友或进Qt群获得答案。

相关文章

  • 4.5 停靠窗口

    今天小豆君来分享下Qt的停靠窗口QDockWidget。 QDockWidget可以停靠在QMainWindow内...

  • 停靠窗口QDockWidget

    1)创建一个QDockWidget的对象; 2)设置此停靠窗口的属性,通常是setFeatures()和 setA...

  • C#之Winform实现MDI导航树Treeview

    1 先上效果图 导航树停靠在MDI窗体的左边,可拖动改变大小,打开的窗口在【窗口】菜单下有列表。VS2010实现这...

  • 【UiPath Studio 中文文档】02 UiPath 入门

    UiPath Studio 包含多个面板,以便更容易地访问特定功能。它们可以停靠,充当浮动窗口,也可以启用“自动隐...

  • 【UiPath Studio 中文文档 2019】02 UiPa

    UiPath Studio 包含多个面板,以便更容易地访问特定功能。它们可以停靠,充当浮动窗口,也可以启用“自动隐...

  • 停靠

    “当有人突然从你的生命中消失 你不要再问为什么 因为他或她到了该走的时候了 只需要接受就好 只是知道有些事情终究无...

  • 停靠

    我是一个讨厌热闹的人,却活在热闹之中。不管是朝九晚五的工作,还是一日三餐的生活,总有热聊声和人喧声。 清净的地方大...

  • 停靠

    我不大喜欢坐长途汽车时吃很多东西,一是嫌它的麻烦,要么上车前买好要吃的,想吃的东西,然而上车前往往在早饭刚过,并没...

  • 停靠

    好久不出门,连逛超市都省略了。周六在办公室整理资料的时候,同事问我:“这学期没见你周末出去摩旅了,原来的...

  • 停靠

    害怕一切潜在的可怕的人或事,不多思考,不多猜测,那便什么都没有了。 没有意识,那就不要存在吧。 不用揣度,不用小心...

网友评论

    本文标题:4.5 停靠窗口

    本文链接:https://www.haomeiwen.com/subject/pvajrqtx.html