天天看點

Qt之布局管理--(2)多文檔的布局和焦點

Qt提供了一個QWorkspace類,利用QWorkspace類可以很友善的實作多文檔的應用。

QWorkspace類繼承自QWidget類,是以隻需在QMainWindow主視窗中把QWorkspace對象設定為中央窗體即可。

示例:示範多文檔的布局和焦點控制

MainWin.h

#ifndef MAINWIN_H 

#define MAINWIN_H

#include <QtGui> 

#include <QWorkspace>

class MainWin : public QMainWindow 

    Q_OBJECT

public: 

    MainWin(QWidget *parent = 0, Qt::WFlags flags = 0); 

    ~MainWin();

    void createMenu();

private: 

    QWorkspace *workSpace;

private slots: 

    void sl_scroll(bool); 

};

#endif // MAINWIN_H

#ifndef MAINWIN_H  

#define MAINWIN_H  

#include <QtGui>  

#include <QWorkspace>  

class MainWin : public QMainWindow  

{  

    Q_OBJECT  

public:  

    MainWin(QWidget *parent = 0, Qt::WFlags flags = 0);  

    ~MainWin();  

    void createMenu();  

private:  

    QWorkspace *workSpace;  

private slots:  

    void sl_scroll(bool);  

};  

#endif // MAINWIN_H  

MainWin.cpp

#include "mainwin.h"  

MainWin::MainWin(QWidget *parent, Qt::WFlags flags)  

    : QMainWindow(parent, flags)  

    workSpace = new QWorkspace;  

    setCentralWidget(workSpace);    //設定workSpace為主視窗的中心窗體  

    createMenu();  

    //視窗1:  

    QMainWindow *win1 = new QMainWindow;  

    win1->setWindowTitle(tr("window 1"));  

    QTextEdit *edt1 = new QTextEdit;  

    edt1->setText("window 1");  

    win1->setCentralWidget(edt1);  

    //視窗2:  

    QMainWindow *win2 = new QMainWindow;  

    win2->setWindowTitle(tr("window 2"));  

    QTextEdit *edt2 = new QTextEdit;  

    edt2->setText("window 2");  

    win2->setCentralWidget(edt2);  

    //視窗3:  

    QMainWindow *win3 = new QMainWindow;  

    setWindowTitle(tr("window 3"));  

    QTextEdit *edt3 = new QTextEdit;  

    edt3->setText("window 3");  

    win3->setCentralWidget(edt3);  

    //在workSpace中插入子視窗,即實作多文檔的顯示  

    workSpace->addWindow(win1);  

    workSpace->addWindow(win2);  

    workSpace->addWindow(win3);  

}  

MainWin::~MainWin()  

void MainWin::createMenu()  

    //布局菜單  

    QMenu *menu_layout = menuBar()->addMenu(tr("Layout"));  

    QAction *act_arrange = new QAction(tr("Arrange Icons"),this);  

    connect(act_arrange,SIGNAL(triggered()),workSpace,SLOT(arrangeIcons()));  

    menu_layout->addAction(act_arrange);  

    QAction *act_tile = new QAction(tr("Tile"),this);  

    connect(act_tile,SIGNAL(triggered()),workSpace,SLOT(tile()));  

    menu_layout->addAction(act_tile);  

    QAction *act_cascade = new QAction(tr("Cascade"),this);  

    connect(act_cascade,SIGNAL(triggered()),workSpace,SLOT(cascade()));  

    menu_layout->addAction(act_cascade);  

    //其他按鈕  

    QMenu *menu_other = menuBar()->addMenu(tr("Other"));  

    QAction *act_scroll = new QAction(tr("Scroll"),this);  

    act_scroll->setCheckable(true);  

    connect(act_scroll,SIGNAL(toggled(checked)),workSpace,SLOT(sl_scroll(checked)));  

    menu_other->addAction(act_scroll);  

    menu_other->addSeparator();  //添加分隔符  

    QAction *act_Next = new QAction(tr("Next"),this);  

    connect(act_Next,SIGNAL(triggered()),workSpace,SLOT(activateNextWindow()));  

    menu_other->addAction(act_Next);  

    QAction *act_previous = new QAction(tr("Previous"),this);  

    connect(act_previous,SIGNAL(triggered()),workSpace,SLOT(activatePreviousWindow()));  

    menu_other->addAction(act_previous);  

void MainWin::sl_scroll(bool checked)  

    if(checked)  

    {  

        workSpace->setScrollBarsEnabled(true);  

    }  

    else  

        workSpace->setScrollBarsEnabled(false);  

在這個示例中,用到了QMenu類和QAction類.

下圖為QAction類的信号;

<a href="http://images.cnblogs.com/cnblogs_com/hanzhaoxin/201211/201211152255024788.png"></a>

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

本文轉自韓兆新部落格部落格園部落格,原文連結:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/15/2772438.html,如需轉載請自行聯系原作者

繼續閱讀