当前位置: 首页 > news >正文

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(); }

相关文章:

  • 局部特征(4)——SIFT和SURF的比较
  • 传感网和物联网的由来、进展与发展趋势
  • Linux多线程服务端编程:使用muduo C++网络库
  • 移动互联网终端策略研究
  • JavaScript中的shift()和pop()函数
  • 拿到第8期程序员杂志了,上面有我的Haskell文章
  • 博客开通第64天
  • 用正则截取字符串中的中文
  • Sql查询语句过滤重复的数据
  • CSS控制文本超出指定宽度后用省略号代替
  • Qt 实现分割窗口并国际化
  • 【问题和解决】python中nltk与nltk_contrib的关系
  • 程序员十层楼
  • Keychain Services Concepts
  • 评教模块编码结束--项目感受
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • es6(二):字符串的扩展
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java多线程(4):使用线程池执行定时任务
  • Java精华积累:初学者都应该搞懂的问题
  • js如何打印object对象
  • mac修复ab及siege安装
  • MobX
  • MySQL QA
  • React系列之 Redux 架构模式
  • Windows Containers 大冒险: 容器网络
  • 包装类对象
  • 对JS继承的一点思考
  • 如何进阶一名有竞争力的程序员?
  • 如何使用 JavaScript 解析 URL
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 用jQuery怎么做到前后端分离
  • ​【已解决】npm install​卡主不动的情况
  • ​Python 3 新特性:类型注解
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #1014 : Trie树
  • (2022 CVPR) Unbiased Teacher v2
  • (bean配置类的注解开发)学习Spring的第十三天
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (九)One-Wire总线-DS18B20
  • (强烈推荐)移动端音视频从零到上手(上)
  • (四)汇编语言——简单程序
  • (一)基于IDEA的JAVA基础12
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)【Hibernate总结系列】使用举例
  • (转)jQuery 基础
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Net 6.0 处理跨域的方式