Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。
基本知识脑补:
常规知识控件: QstatusBar, QtoolBar
循序渐进来实现效果:
我们应该意识到的是,qt中的mainwindow中实际上只是给我们提供了一个框架窗口而已,并不像MFC中有FrameWidow窗口和View窗口,所以依照上图的理解,我们应该自己派生出一个view窗口出来,达到自己设定成Frame和view分离的目的了.
这样设计的好处:依照上图,各司其职.toolbar就是toolbar部分,central就是central.
简单来说,各个控件,窗口相互独立开来了,也好管理了.人人都是maindow的一部分.
实现之前:
实现之后://这个动态图片估计要上传.
工程文件预览:
Mainwindow.h
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include<QMainWindow>
#include"two.h"
namespaceUi{
classMainWindow;
}
classMainWindow:publicQMainWindow
{
Q_OBJECT
public:
explicitMainWindow(QWidget*parent=0);
~MainWindow();
two*temwidow;
//voidpaintEvent(QPaintEvent*);
private:
Ui::MainWindow*ui;
};
#endif//MAINWINDOW_H
Two.h
#ifndefTWO_H
#defineTWO_H
#include<QWidget>
classtwo:publicQWidget
{
Q_OBJECT
public:
explicittwo(QWidget*parent=0);
voidpaintEvent(QPaintEvent*);
signals:
publicslots:
};
#endif//TWO_H
Mainwindow,cpp
#include"mainwindow.h"
#include"ui_mainwindow.h"
#include<QPainter>
#include<QDockWidget>
#include<QLabel>
MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi::MainWindow)
{
ui->setupUi(this);
QToolBar*tool=this->addToolBar("hell");
QAction*one=newQAction("one",this);
QAction*twoac=newQAction("two",this);
QAction*three=newQAction("three",this);
tool->addAction(one);
tool->addAction(twoac);
tool->addAction(three);
QDockWidget*dock1=newQDockWidget("上侧部件");
addDockWidget(Qt::TopDockWidgetArea,dock1);
QDockWidget*dock2=newQDockWidget("下册部件");
addDockWidget(Qt::TopDockWidgetArea,dock2);
//statusBar()->addWidget(three);
QLabel*la=newQLabel;
la->setText("Myla");
QStatusBar*MainBar=statusBar();
MainBar->addWidget(la);
temwidow=newtwo;
this->setCentralWidget(temwidow);
}
MainWindow::~MainWindow()
{
deleteui;
}
Two.cpp
#include"two.h"
#include<QPainter>
two::two(QWidget*parent):
QWidget(parent)
{
}
voidtwo::paintEvent(QPaintEvent*)
{
QPainterusepaint(this);
usepaint.drawPixmap(0,0,QPixmap("mage/one.png"));
}
/*接下来就是研究docwindow*/
重点提及概念点就很好操作理解了:
1.docwindow实际上还是窗口,需要适当的时候show出来.
2.如果允许中间嵌套窗体的话,需要
//允许嵌套dock
setDockNestingEnabled(true);
自整理理解的项目下载地址:http://download.csdn.net/detail/qq_24571549/9796621
参考相关资料链接:
http://www.cnblogs.com/newstart/p/4476141.html
http://blog.csdn.net/czyt1988/article/details/51209619