Dock布局窗口

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值