Qt 实现多文档

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2010/08/10/5800795.aspx

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

Qt 提供了一个 QWorkspace 类,利用 QWorkspace 可以很容易实现多文档的应用 QWorkspace 类继承自 QWidget ,因此只需要在 QMainWindow 主窗口中把 QWorkspace 对象设置为中央窗体即。QWorkspace 类提供了许多对子窗口进行排序的函数接口,如cascade(),arrangeIcon(),tile()。

//window.h #ifndef WINDOW_H #define WINDOW_H #include <QWorkspace> #include <QTextEdit> #include <QMenu> #include <QMenuBar> #include <QAction> #include <QtGui> class MainWidget : public QMainWindow{ Q_OBJECT public: MainWidget(); ~MainWidget(); void createMenu(); private slots: void slotScroll(bool); private: QWorkspace * workspace; }; #endif

先把QWorkspace类设为MainWidget的中央窗体,用QMainWindow类创建3个子窗口window1,window2,window3,

通过addWindow()方法把子窗体插入QWorkspace。

实现对字窗口的arrangeIcons布局,它的布局方式是所有子窗口在主窗口底部按标题栏排列,可直接把triggered()信号

和arrangeIcons()函数相连。注意此排列方式仅对已最小的子窗口起作用。

实现对子窗口的tile布局,tile的意思是用子窗口把主窗口像铺瓦片或贴瓷砖一样贴满。

实现对子窗口的cascade布局,即子窗口的层叠显示

activateNextWindow(),使下一个子窗口获得焦点。

activatePreviousWindow(),使前一个子窗口获得焦点。

setScrollBarsEnabled(),它的参数是bool型的,如果为true,则滑动条可用,如果为false,滑动条不可用。

#include "window.h" MainWidget::MainWidget(){ workspace = new QWorkspace; setWindowTitle("Mutiple Document"); setCentralWidget(workspace); createMenu(); QMainWindow * window1 = new QMainWindow; window1->setWindowTitle("window1"); QTextEdit * e1 = new QTextEdit; e1->setText("window1"); window1->setCentralWidget(e1); QMainWindow * window2 = new QMainWindow; window2->setWindowTitle("window2"); QTextEdit * e2 = new QTextEdit; e2->setText("window2"); window2->setCentralWidget(e2); QMainWindow * window3 = new QMainWindow; window3->setWindowTitle("window3"); QTextEdit * e3 = new QTextEdit; e3->setText("window3"); window3->setCentralWidget(e3); workspace->addWindow(window1); workspace->addWindow(window2); workspace->addWindow(window3); } void MainWidget::createMenu(){ QMenu *layout = menuBar()->addMenu(tr("Layout")); QAction * arrange = new QAction(tr("Arange Icons"),this); connect(arrange,SIGNAL(triggered()),workspace,SLOT(arrangeIcons())); layout->addAction(arrange); QAction *tile = new QAction(tr("Tile"),this); connect(tile,SIGNAL(triggered()),workspace,SLOT(tile())); layout->addAction(tile); QAction *cascade = new QAction(tr("Cascade"),this); connect(cascade,SIGNAL(triggered()),workspace,SLOT(cascade())); layout->addAction(cascade); QMenu *other = menuBar()->addMenu(tr("Other")); QAction *scroll = new QAction(tr("Scroll"),this); scroll->setCheckable(true); connect(scroll,SIGNAL(toggled(bool)),this,SLOT(slotScroll(bool))); other->addAction(scroll); other->addSeparator(); QAction *next = new QAction(tr("nextWindow"),this); connect(next,SIGNAL(triggered()),workspace,SLOT(activateNextWindow())); other->addAction(next); QAction * previous = new QAction(tr("previousWindow"),this); connect(previous,SIGNAL(triggered()),workspace,SLOT(activatePreviousWindow())); other->addAction(previous); } MainWidget::~MainWidget(){ } void MainWidget::slotScroll(bool check){ if(check) workspace->setScrollBarsEnabled(true); else workspace->setScrollBarsEnabled(false); }

#include <QApplication> #include "window.h" int main(int argc, char *argv[]){ QApplication app(argc, argv); MainWidget w; w.show(); return app.exec(); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值