13.QT-QMainWindow组件使用
QMainWindow介绍
- 主窗口是与用户进行长时间交互的顶层窗口,比如记事本
- 主窗口通常是应用程序启动后显示的第一个窗口
- QMainWindow是Qt中主窗口的基类,继承于QWidget,如下图所示:

QMainWindow和其它类不同,如下图所示:

QMainWindow组件布局

1.菜单栏
QT中提供了预定义的与菜单相关的类组件:

创建菜单示例:
QMenuBar mb= menuBar(); //返回菜单栏,如果菜单栏没有创建,则返回一个空的菜单栏
QMenu* menu= new QMenu("File(&F)", QMenuBar ); //(&F):表示添加alt+F键快捷键打开这个菜单
QAction* action= new QAction("New(N)", QMenu); //(N):表示添加N键快捷键
action-> setShortcut(QKeySequence (Qt::CTRL + Qt::Key_N)); //为菜单项设置快捷键:ctrl+n
menu->addAction(action); //向菜单里添加菜单项"New"
menu->addSeparator(); //添加菜单分隔符
mb->addMenu(menu); //向菜单栏里添加菜单File
2.工具栏
- 工具栏中的元素可以是各种窗口组件(QAction,Qwidget)
- 工具栏中的元素通常以图标方式存在,
- 以SI软件为例,它的工具栏如下图所示:

工具栏使用
在Qt中,通过QToolBar类来创建工具栏,然后通过QAction类来创建工具项,如下图所示:

QToolBar关键成员函数
void setFloatable ( bool floatable );
//设置工具栏是否可以当做独立的窗口,停靠在上下左右窗口旁,,默认为true void setMovable(bool movable);
//设置工具栏是否可以自动移动,停靠在任意处,默认为true void setIconSize ( const QSize & iconSize );
//设置工具栏中的每个图标大小
创建工具栏示例:
QToolBar *tb = addToolBar("ToolBar"); //将"ToolBar"插入当前工具栏区域,并返回这个QToolBar对象
QAction *action = new QAction("",QToolBar);
action->setToolTip("Open"); //信息提示,当鼠标靠近这个项,便会提示信息
action->setIcon(QIcon(":/res/pic/open.png")); //设置图标,冒号表示该文件处于资源文件指定的地方
tb->addAction(action); //将工具栏选项加入工具栏
QToolBar中可以加入任意的QWidget组件,比如:文本框(用来查找文字)
示例,在MainWindow类的构造函数里写入:
QToolBar* tb = addToolBar("Tool Bar");
QAction* action = new QAction("",QToolBar);
tb->setFloatable(false);
tb->setMovable(false);
action->setToolTip("Open");
action->setIcon(QIcon(":/Res/open.png"));
tb->addAction(action);
tb->addSeparator(); //添加间隔符
/*添加QWidget组件*/
QPushButton* b = new QPushButton("Button");
QLabel* l = new QLabel("Label",this);
QLineEdit* e = new QLineEdit(this);
tb->addWidget(b);
tb->addWidget(l);
tb->addWidget(e);
添加Qt资源文件,将open.png加入程序指定的位置处:

Qt资源文件的作用,就是告诉Qt Creator,该文件处于哪个位置
编译运行:

3.状态栏
- 状态栏一般位于主窗口最底部
- 用来显示简要信息
显示的信息一般分为:
-实时信息,如: 当前程序状态
-永久信息,如: 程序版本号,机构名称
-进度信息,如: 进度条提示,百分比提示
在Qt中,通过QStatusBar类来创建状态栏,这个类是个容器类组件,可以包含任意QWidget类,如下图所示:

常用函数:
QStatusBar * statusBar ();
//获取当前类的状态栏,如果状态栏没有创建,则返回一个空的状态栏 void showMessage ( const QString & message, int timeout = ) ;
//在状态栏下左下部显示信息, timeout 的单位是ms,timeout倒计时完会调用clearMessage() void clearMessage ()
//清除消息
创建状态栏示例:
QStatusBar *sb = statusBar();
QLabel* status1 = new QLabel("Line: 1 Col: 1",this);
QLabel* status2 = new QLabel("Lines: 0 Length: 0",this);
status1->setAlignment(Qt::AlignCenter);
status2->setAlignment(Qt::AlignCenter);
status1->setMinimumWidth(); //设置最小宽度,避免与旁边的信息紧靠在一起
status2->setMinimumWidth();
sb->addPermanentWidget(status1);
sb->addPermanentWidget(status2);
效果:

文本编辑组件
QT中提供了三种文本编辑组件
- QLineEdit :单行文本编辑组件
- QTextEdit:多行富文本编辑组件(类似于word编辑,可以实现图片,个别文字的字体,颜色等编辑)
- QPlainTextEdit:多行普通文本编辑组件(类似于记事本编辑)
Qt,在文本编辑组件里自带了右键式菜单
可以实现复制,粘贴,剪切等,以QTextEdit为例:

常用函数
QMenu * QLineEdit::createStandardContextMenu();
//获取右击菜单内容
menu->addAction(tr("My Menu Item"));
//添加右击菜单内容
addAction(QAction *action, ActionPosition position);
//可以在编辑框的开始或者末尾添加一个action,方便我们操作,一个完美的搜索框顿时出现。
以QPlainTextEdit组件为例,它的常用信号函数如下:
void textChanged ();
//每当文档的内容发生变化时,则触发该信号,可以用来判断文本是否被修改,以及输入的字符是什么 void QPlainTextEdit::selectionChanged () ;
//当文本框鼠标选择改变时,触发该信号 void QPlainTextEdit::cursorPositionChanged ();
//每当光标的位置发生变化时,触发该信号 void undoAvailable ( bool available );
//当用户进行撤销操作时,则触发该信号,如果撤销成功则available 为true void redoAvailable ( bool available );
//当用户进行重做操作时,则触发该信号,如果文本框为空则available 为true void blockCountChanged ( int newBlockCount )
//每当按下回车或者删除回车(更新字符块),则newBlockCount计数,并触发该信号, newBlockCount 默认为1
13.QT-QMainWindow组件使用的更多相关文章
- Qt Quick 组件和动态创建的对象具体的解释
在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...
- django第13天(auth组件,forms组件,中间件,csrf)
django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...
- Qt Quick 组件与动态对象
博客24## 一.Components(组件) Component 是由 Qt 框架或开发者封装好的.只暴露了必要接口的 QML 类型,可以重复利用.一个 QML 组件就像一个黑盒子,它通过属性.信号 ...
- 与 QWidget 有关的 Qt 可视化组件的继承关系图
与 QWidget 有关的 Qt 可视化组件的继承关系图
- Qt容器组件(二)之QWidgetStack、QMdiArea、QDockWidget
QT中有九种容器组件,分别是组合框QGroupBox.滚动区QScrollArea.工具箱QToolBox.选项卡QTabWidget.控件栈QWidgetStack.框架QFrame.组件QWidg ...
- Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles
本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文 Qt5官方demo解析集12--Qt Quic ...
- QT的组件布局
在QT的IDE下,编写一个自定义布局. #include<QApplication> #include<QWidget> #include<QSpinBox> #i ...
- Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget
QT中有九种容器组件,分别是组合框QGroupBox.滚动区QScrollArea.工具箱QToolBox.选项卡QTabWidget.控件栈QWidgetStack.框架QFrame.组件QWidg ...
- 13、form组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件
一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...
随机推荐
- MySql中的varchar长度究竟是字节还是字符
今天在设计表的时候,遇到个小问题,由于不知道未来将要存储的数据有多长(数据是通过第三方http接口提供的,根据sample显示,数据大概是如下:) 也就是6个字符. 我在设计表的时候,有点犹豫,本来准 ...
- [转]使用awk批量杀进程的命令
1. ps -ef|grep aaa|grep -v grep 这是大家很熟悉的命令,这里就不再多说,就是从当前系统运行的进程的进程名中包含aaa关键字的进程. 2. 后面部分就是awk命令了,一般a ...
- [项目推荐] Corcel 让你在 WordPress 中使用 Laravel
你想过可以在 WordPress 中使用 Laravel 或者任意一种 PHP 框架吗? Corcel 可以帮你实现! 开发网站应用就应该是快捷并有趣的.当然了,每个应用都会有它自己的需求和生命周期. ...
- javaScript系列 [04]-javaScript的原型链
[04]-javaScript的原型链 本文旨在花很少的篇幅讲清楚JavaScript语言中的原型链结构,很多朋友认为JavaScript中的原型链复杂难懂,其实不然,它们就像树上的一串猴子. 1.1 ...
- [LeetCode] Diagonal Traverse 对角线遍历
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ...
- 从零开始搭建支持http2的web服务
前段时间开始,公司各项业务开始陆续接入http2,关于http2的优点与所适用的场景网上有很多的文档可以查阅,这里我主要是总结分享一下如何从0到1搭建http2服务. 这里先说明一下,要完成http2 ...
- PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码
验证.参考漏洞:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0152291.html 漏洞出现在/phpcms/modules/member/in ...
- [ZJOI 2013]丽洁体
Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...
- [IOI2007]训练路径
Description 马克(Mirko)和斯拉夫克(Slavko)正在为克罗地亚举办的每年一次的双人骑车马拉松赛而紧张训练.他们需要选择一条训练路径. 他们国家有N个城市和M条道路.每条道路连接两个 ...
- ●BZOJ 3894 文理分科
题链: https://vijos.org/d/ljt12138/p/58c696b8d3d8a16c62a248d4 (要权限号啊...用这个交吧) 题解: 题目大意: N*M的矩阵,每个位置 ...