QT开发(二十二)——QMainWindow主窗口

QT开发(二十二)——QMainWindow主窗口

一、主窗口简介

应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成。

QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件。

QMainWindow内部封装了菜单栏、工具栏、中心组件、停靠组件、状态栏等。

QMainWindow内置了布局管理器,基本的组件布局如下:

二、菜单栏

QT中提供了预定义的与菜单相关的类组件,菜单栏QMenuBar,下拉菜单QMenu,菜单项QAction。

QMenuBar* mb = menuBar();

QMenu* menu = new QMenu("File(&F)");

QAction *action = new QAction(text, NULL);

menu->addAction(action);

mb->addMenu(menu);

快捷键设置

action->setShortcut(QKeySequence(KEY));

QKeySequence是QT中与快捷键相关的类,KEY是QT中代表键值的常量。

三、工具栏

工具栏是应用程序中集成各种功能使用快捷方式的区域,不是应用程序必须存在的组件,工具栏的元素可以是各种窗口组件,但通常以图标按钮的方式存在。

QT中提供了预定义的工具栏相关组件,工具栏QToolBar和快捷项QAction。

1、工具栏使用方法

//创建工具栏

QToolBar *tb = addToolBar("ToolBar");

//创建工具栏选项

QAction *action = new QAction("", NULL);

action->setToolTip(“Open”);

action->setIcon(QIcon(“/res/pic/open.png”));

//将工具栏选项加入工具栏

tb->addAction(action);

2、QToolBar实用函数

void setFloatable(bool floatable)    设置工具栏为浮动

void setMovable(bool movable)    设置工具栏为可移动

void setIconSize(const QSize & iconSize)    设置工具栏的图标大小

3、工具栏实例

QTollBar组件中可以加入QT中的任意QWidget组件。

QToolBar* tb = addToolBar("Tool Bar");

QAction* action = new QAction("", NULL);

tb->setFloatable(false);

tb->setMovable(false);

action->setToolTip("Open");

action->setIcon(QIcon(":/Res/open.png"));

tb->addAction(action);

QPushButton* b = new QPushButton("Button");

QLabel* l = new QLabel("Label");

QLineEdit* e = new QLineEdit();

tb->addWidget(b);

tb->addWidget(l);

tb->addWidget(e);

四、状态栏

状态栏是应用程序中输出简要信息的区域,一般位于窗口的底部。状态栏显示的消息类型如下:

A、实时消息,如当前程序状态

B、永久消息,如程序版本,开发机构

C、进度消息,进度显示

QT中提供了预定义的状态栏相关组件状态栏QStatusBar,QStatusBar是容器型组件,可以是任意组件QWidget的父组件。

QT状态栏的一般设计原则:

A、状态栏左边区域用于输出实时消息

B、状态栏右边区域用于输出永久消息

因此,addWidget函数用于在状态栏左边区域添加组件,addPermanentWidget函数用于在状态栏右边区域添加组件。

状态栏使用方法如下:

QStatusBar* sb = statusBar();

QLabel* label = new QLabel("CopyRight @ Scorpio Studio 2016");

if( label != NULL )

{

line.setMinimumWidth(120);

line.setAlignment(Qt::AlignCenter);

line.setText("Ln: 1    Col: 1");

label->setMinimumWidth(160);

label->setAlignment(Qt::AlignCenter);

sb->addPermanentWidget(new QLabel());

sb->addPermanentWidget(&line);

sb->addPermanentWidget(label);

}

五、文本编辑组件

QT中预定义了三种文本编辑组件,用于满足不同的开发需求。

A、QLineEdit单行文本编辑组件

B、QTextEdit多行富文本编辑组件

C、QPlainTextEdit多行普通文本编辑组件

QT文本编辑组件的类继承图:

QT中的文本编辑组件内置了右键弹出和快捷键功能。

文本编辑器的使用:

//设置文本编辑器的父组件

mainEditor.setParent(this);

//设置文本编辑器为中央组件

setCentralWidget(&mainEditor);

时间: 2024-08-02 07:02:09

QT开发(二十二)——QMainWindow主窗口的相关文章

QT开发(十二)——QT事件处理机制

QT开发(十二)--QT事件处理机制 一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开 拖放事件: 用鼠标进行拖放 滚轮事件: 鼠标滚轮滚动 绘屏事件: 重绘屏幕的某些部分 定时事件: 定时器到时 焦点事件: 键盘焦点移动 进入和离开事件: 鼠标移入widget之内,或是移出 移动事件: widget的

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

企业搜索引擎开发之连接器connector(二十二)

下面来分析线程执行类,线程池ThreadPool类 对该类的理解需要对java的线程池比较熟悉 该类引用了一个内部类 /** * The lazily constructed LazyThreadPool instance. */ private LazyThreadPool lazyThreadPool; 该成员实现了单例模式,即该对象只有一个实例,属于懒汉式单例模式,当实例化该成员时,启用了线程同步机制 /** * Shut down the {@link ThreadPool}. Afte

微信公众平台开发(十二) 发送客服消息

原文:微信公众平台开发(十二) 发送客服消息 一.简介 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数.此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务. 二.思路分析 官方文档中只提供了一个发送客服消息的接口,开发者只要POS

从零开始学ios开发(十二):Table Views(中)UITableViewCell定制

我们继续学习Table View的内容,这次主要是针对UITableViewCell,在前一篇的例子中我们已经使用过UITableViewCell,一个默认的UITableViewCell包含imageView.textLabel.detailTextLabel等属性,但是很多时候这些默认的属性并不能满足需要,其实更多的时候我们想自己制定UITableViewCell的内容,这篇学习的就是制定自己的UITableViewCell. UITableViewCell继承自UIView,因此它可以加载

嵌入式Linux裸机开发(十二)——iNand简介

嵌入式Linux裸机开发(十二)--iNand简介 一.iNand简介 iNand是SanDisk公司研发的存储芯片,可以看成SD卡或MMC卡芯片化. iNand是SanDisk公司符合eMMC协议的芯片系列名称,内部采用MLC存储颗粒.iNand接口电路设计复杂,功能完善,提供eMMC接口协议,与SoC的eMMC控制器配对通信. 相对MLC NandFlash,iNAND有以下优点: 1.提高性能 A.减少SOC的工作量,节约SOC资源. 如果使用MLC做存储,SOC要参与FLASH的坏块管理

从零开始学ios开发(十二):Table Views(上)

这次学习的控件非常重要且非常强大,是ios应用中使用率非常高的一个控件,可以说几乎每个app都会使用到它,它就是功能异常强大的Table Views.可以打开你的iphone中的phone.Messages.Contacts.Mail.Settings等等等等,这些都用到了Table Views. 在Table Views中,Table是用来显示一系列数据的,每条数据占用且只占用一行(一个table cell),在ios中没有规定table到底可以容纳多少行数据,也就是说,只要内存足够多,tab

微信开发H5十二人牛牛出租源码下载搭建

微信开发H5十二人牛牛出租源码下载搭建h5.fanshubbs.com联系Q1687054422不同于传统的手游商店下载模式,HTML5 手机网页游戏是可以直接运行在微信内置的浏览器里. 先上图,感知一下具体样子: 而我想分享的是我们在具体开发实现过程中,基于微信的Html5 WebApp需要去克服的一些坑:这个小游戏的基本规则是:限定用户每天刮书次数是2次 (自由刮一次和分享后再刮一次),每天都可刮奖为此,我们希望实现的思路首先是限定在只能使用微信中玩,实现代码如下:if (!HttpCont

Go语言开发(十二)、Go语言常用标准库二

Go语言开发(十二).Go语言常用标准库二 一.os 1.os简介 os 包提供了不依赖平台的操作系统函数接口,设计像Unix风格,但错误处理是go风格,当os包使用时,如果失败后返回错误类型而不是错误数量. 2.os常用接口 func Hostname() (name string, err error) // Hostname返回内核提供的主机名 func Environ() []string // Environ返回表示环境变量的格式为"key=value"的字符串的切片拷贝 f