发个求助博客,关于QT 停靠窗口QDockWidget的改写

本文探讨如何突破QMainWindow的限制,使得QDockWidget能够直接添加到普通QWidget中。主要涉及对QDockAreaLayout的改写,通过源码分析,理解QDockWidget依赖的类,并尝试构建一个包含QDockAreaLayout的QWidget布局。
摘要由CSDN通过智能技术生成

希望去除Qmainwindow的限制,能让QDockAreaLayout添加到普通Qwidget中去。

就是QDockWidget能放在Qwidget中去(原先不能放的原因是QDockWidget需要一个布局QDockAreaLayout,而只有Qmainwindow中才有,整个类的依赖是有一些的)

现在来分析构建一个Qwidget 含有QDockAreaLayout的布局。

这时候我们来看一些源码分析一波。

一个QDockWidget依赖三个大类

QDockAreaLayout,

QDockAreaLayout
QDockWidgetPrivate------这个是他们写代码的一个风格将私有变量封装成一个类,将接口和变量分开管理
贴一波头文件代码,里面含有一些

#ifndef QDYNAMICDOCKWIDGET_P_H
#define QDYNAMICDOCKWIDGET_P_H

#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include "QtWidgets/qstyleoption.h"
#include "private/qwidget_p.h"
#include "QtWidgets/qboxlayout.h"
#include "QtWidgets/qdockwidget.h"

QT_REQUIRE_CONFIG(dockwidget);

QT_BEGIN_NAMESPACE

class QGridLayout;
class QWidgetResizeHandler;
class QDockWidgetTitleButton;
class QSpacerItem;
class QDockWidgetItem;

class QDockWidgetPrivate : public QWidgetPrivate
{
    Q_DECLARE_PUBLIC(QDockWidget)

    struct DragState {
        QPoint pressPos;
        bool dragging;
        QLayoutItem *widgetItem;
        bool ownWidgetItem;
        bool nca;
        bool ctrlDrag;
    };

public:
    inline QDockWidgetPrivate()
        : QWidgetPrivate(), state(0),
          features(QDockWidget::DockWidgetClosable
                   | QDockWidget::DockWidgetMovable
                   | QDockWidget::DockWidgetFloatable),
          allowedAreas(Qt::AllDockWidgetAreas), resizer(0)
    { }

    void init();
    void _q_toggleView(bool); // private slot
    void _q_toggleTopLevel(); // private slot

    void updateButtons();
    DragState *state;

    QDockWidget::DockWidgetFeatures features;//一些窗口特性的存放
    Qt::DockWidgetAreas allowedAreas;//可停靠的区域

    QFont font;

#ifndef QT_NO_ACTION
    QAction *toggleViewAction;
#endif

//    QMainWindow *findMainWindow(QWi
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值