Qt开发:停靠窗口(QDockWidget)

QDockWidget介绍

QDockWidget 是 Qt 中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗口中。
QDockWidget主要有以下特点:

停靠功能:QDockWidget 允许用户将窗口部件停靠在主窗口的各个位置,如左侧、右侧、上方或下方。
浮动窗口:用户还可以将 QDockWidget 拖动到独立的浮动窗口中。
可关闭:QDockWidget 可以关闭,允许用户根据需要隐藏或显示它。
自定义部件:你可以将自定义的部件放在 QDockWidget 中,以构建自定义的界面元素。

QDockWidget的常用函数

QDockWidget 类提供了一系列函数,用于配置和管理停靠式窗口的行为和外观。
以下是一些常用的 QDockWidget 函数的介绍和使用方法:
设置停靠窗口中的部件

QDockWidget dockWidget("标题", &mainWindow);
QWidget *customWidget = new QWidget;
dockWidget.setWidget(customWidget);

设置允许停靠的区域

dockWidget.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

设置停靠窗口的功能特性,如关闭按钮、可浮动等

dockWidget.setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable);

设置停靠窗口的标题

dockWidget.setWindowTitle("My Dock Widget");

设置停靠窗口的可见性

dockWidget.setVisible(true); // 显示停靠窗口

检查停靠窗口是否在浮动状态

bool isFloating = dockWidget.isFloating();

关闭停靠窗口

dockWidget.close();

获取一个 QAction 对象,用于在工具栏中切换停靠窗口的可见性

QAction *toggleAction = dockWidget.toggleViewAction();
toolBar->addAction(toggleAction);

在停靠窗口的浮动状态发生变化时触发

QObject::connect(&dockWidget, &QDockWidget::topLevelChanged, [&](bool floating) {
    if (floating) {
        qDebug() << "窗口已浮动";
    } else {
        qDebug() << "窗口已停靠";
    }
});

这些函数可以帮助你配置 QDockWidget 控件的各种属性,包括设置停靠区域、标题、可见性、功能特性等。你还可以使用 toggleViewAction 函数来创建一个切换停靠窗口可见性的操作,以便用户可以通过工具栏切换窗口的显示状态。topLevelChanged 信号可以用于监测停靠窗口的浮动状态的变化。根据应用程序的需求,你可以使用这些函数来自定义停靠窗口的行为和外观。

QDockWidget示例

#include "main_window.h"
 
#include <QDockWidget>
#include <QTextEdit>
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("停靠窗口");
    this->setFixedSize(600, 400);
 
    QTextEdit *pTextEdit = new QTextEdit(this);
    pTextEdit->setText("主窗口测试");
    pTextEdit->setAlignment(Qt::AlignLeft);
    this->setCentralWidget(pTextEdit);
 
    //停靠窗口实现
    QDockWidget *pDock = new QDockWidget("停靠窗口1", this);
    pDock->setFeatures(QDockWidget::DockWidgetMovable);
    pDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    QTextEdit *pText1 = new QTextEdit(this);
    pText1->setText("你好");
    pDock->setWidget(pText1);
    this->addDockWidget(Qt::RightDockWidgetArea, pDock);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值