Qt之布局管理--(2)多文档的布局和焦点

简介:

Qt提供了一个QWorkspace类,利用QWorkspace类可以很方便的实现多文档的应用。

QWorkspace类继承自QWidget类,因此只需在QMainWindow主窗口中把QWorkspace对象设置为中央窗体即可。

imageimage


彩虹示例:演示多文档的布局和焦点控制

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

  1. #ifndef MAINWIN_H  
  2. #define MAINWIN_H  
  3.   
  4. #include <QtGui>  
  5. #include <QWorkspace>  
  6.   
  7.   
  8. class MainWin : public QMainWindow  
  9. {  
  10.     Q_OBJECT  
  11.   
  12. public:  
  13.     MainWin(QWidget *parent = 0, Qt::WFlags flags = 0);  
  14.     ~MainWin();  
  15.   
  16.     void createMenu();  
  17.   
  18. private:  
  19.     QWorkspace *workSpace;  
  20.   
  21.   
  22. private slots:  
  23.     void sl_scroll(bool);  
  24.       
  25. };  
  26.   
  27. #endif // MAINWIN_H  

MainWin.cpp

 

  1. #include "mainwin.h"  
  2.   
  3. MainWin::MainWin(QWidget *parent, Qt::WFlags flags)  
  4.     : QMainWindow(parent, flags)  
  5. {  
  6.     workSpace = new QWorkspace;  
  7.     setCentralWidget(workSpace);    //设置workSpace为主窗口的中心窗体  
  8.   
  9.     createMenu();  
  10.   
  11.     //窗口1:  
  12.     QMainWindow *win1 = new QMainWindow;  
  13.     win1->setWindowTitle(tr("window 1"));  
  14.     QTextEdit *edt1 = new QTextEdit;  
  15.     edt1->setText("window 1");  
  16.     win1->setCentralWidget(edt1);  
  17.     //窗口2:  
  18.     QMainWindow *win2 = new QMainWindow;  
  19.     win2->setWindowTitle(tr("window 2"));  
  20.     QTextEdit *edt2 = new QTextEdit;  
  21.     edt2->setText("window 2");  
  22.     win2->setCentralWidget(edt2);  
  23.     //窗口3:  
  24.     QMainWindow *win3 = new QMainWindow;  
  25.     setWindowTitle(tr("window 3"));  
  26.     QTextEdit *edt3 = new QTextEdit;  
  27.     edt3->setText("window 3");  
  28.     win3->setCentralWidget(edt3);  
  29.   
  30.     //在workSpace中插入子窗口,即实现多文档的显示  
  31.     workSpace->addWindow(win1);  
  32.     workSpace->addWindow(win2);  
  33.     workSpace->addWindow(win3);  
  34. }  
  35.   
  36. MainWin::~MainWin()  
  37. {  
  38.   
  39. }  
  40.   
  41. void MainWin::createMenu()  
  42. {  
  43.     //布局菜单  
  44.     QMenu *menu_layout = menuBar()->addMenu(tr("Layout"));  
  45.   
  46.     QAction *act_arrange = new QAction(tr("Arrange Icons"),this);  
  47.     connect(act_arrange,SIGNAL(triggered()),workSpace,SLOT(arrangeIcons()));  
  48.     menu_layout->addAction(act_arrange);  
  49.   
  50.     QAction *act_tile = new QAction(tr("Tile"),this);  
  51.     connect(act_tile,SIGNAL(triggered()),workSpace,SLOT(tile()));  
  52.     menu_layout->addAction(act_tile);  
  53.   
  54.     QAction *act_cascade = new QAction(tr("Cascade"),this);  
  55.     connect(act_cascade,SIGNAL(triggered()),workSpace,SLOT(cascade()));  
  56.     menu_layout->addAction(act_cascade);  
  57.   
  58.     //其他按钮  
  59.     QMenu *menu_other = menuBar()->addMenu(tr("Other"));  
  60.   
  61.     QAction *act_scroll = new QAction(tr("Scroll"),this);  
  62.     act_scroll->setCheckable(true);  
  63.     connect(act_scroll,SIGNAL(toggled(checked)),workSpace,SLOT(sl_scroll(checked)));  
  64.     menu_other->addAction(act_scroll);  
  65.   
  66.     menu_other->addSeparator();  //添加分隔符  
  67.   
  68.     QAction *act_Next = new QAction(tr("Next"),this);  
  69.     connect(act_Next,SIGNAL(triggered()),workSpace,SLOT(activateNextWindow()));  
  70.     menu_other->addAction(act_Next);  
  71.   
  72.     QAction *act_previous = new QAction(tr("Previous"),this);  
  73.     connect(act_previous,SIGNAL(triggered()),workSpace,SLOT(activatePreviousWindow()));  
  74.     menu_other->addAction(act_previous);  
  75. }  
  76.   
  77. void MainWin::sl_scroll(bool checked)  
  78. {  
  79.     if(checked)  
  80.     {  
  81.         workSpace->setScrollBarsEnabled(true);  
  82.     }  
  83.     else  
  84.     {  
  85.         workSpace->setScrollBarsEnabled(false);  
  86.     }  
  87. }  

在这个示例中,用到了QMenu类和QAction类.

下图为QAction类的信号;

image


作者: 韩兆新
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:  [02]Qt语言基础
标签:  Qt学习笔记

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/15/2772438.html,如需转载请自行联系原作者
目录
相关文章
|
19天前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
30 5
|
19天前
Qt 布局管理之 停靠窗口QDockWidget
Qt 布局管理之 停靠窗口QDockWidget
86 0
|
19天前
Qt 布局管理之分割窗口
Qt 布局管理之分割窗口
44 0
|
7月前
20 QT - 布局管理器概述
20 QT - 布局管理器概述
31 0
|
19天前
|
开发者
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
Qt 布局(QSplitter 类&QDockWidget 类) 总结
|
19天前
|
编译器 C语言 开发者
Qt Quick 常见控件与子控件布局规则
Qt Quick 常见控件与子控件布局规则
53 1
|
19天前
|
编解码 开发者 UED
Qt布局实战:实现高效、美观的GUI应用程序
Qt布局实战:实现高效、美观的GUI应用程序
271 2
|
19天前
使用代码实现QT自定义布局
使用代码实现QT自定义布局
|
8月前
|
容器
『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用
『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用
36 0