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,如需轉載請自行聯系原作者