希望去除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