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组件使用的更多相关文章

  1. Qt Quick 组件和动态创建的对象具体的解释

    在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...

  2. django第13天(auth组件,forms组件,中间件,csrf)

    django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...

  3. Qt Quick 组件与动态对象

    博客24## 一.Components(组件) Component 是由 Qt 框架或开发者封装好的.只暴露了必要接口的 QML 类型,可以重复利用.一个 QML 组件就像一个黑盒子,它通过属性.信号 ...

  4. 与 QWidget 有关的 Qt 可视化组件的继承关系图

    与 QWidget 有关的 Qt 可视化组件的继承关系图

  5. Qt容器组件(二)之QWidgetStack、QMdiArea、QDockWidget

    QT中有九种容器组件,分别是组合框QGroupBox.滚动区QScrollArea.工具箱QToolBox.选项卡QTabWidget.控件栈QWidgetStack.框架QFrame.组件QWidg ...

  6. Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文 Qt5官方demo解析集12--Qt Quic ...

  7. QT的组件布局

    在QT的IDE下,编写一个自定义布局. #include<QApplication> #include<QWidget> #include<QSpinBox> #i ...

  8. Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget

    QT中有九种容器组件,分别是组合框QGroupBox.滚动区QScrollArea.工具箱QToolBox.选项卡QTabWidget.控件栈QWidgetStack.框架QFrame.组件QWidg ...

  9. 13、form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  10. Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件

    一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...

随机推荐

  1. 重启Apache报错

    重启Apache报错,如图所示:server: /etc/httpd/modules/mod_jk.so: wrong ELF class: ELFCLASS64 原因:mod_jd的版本有问题 解决 ...

  2. Python/零起点(一、数字及元组)

    Python/零起点(一.数字及元组) int整型 int()强行转换成整型数据类型 int整型是不可变,且是不可迭代的对象 一.整型数字用二进制位数表示案例: age=7 #设定一个数字赋值给age ...

  3. hive:导出数据记录中null被替换为\n的解决方案

    在hive中,一般情况下通过 use my_hive_db; set hive.merge.mapfiles=true; set hive.merge.mapredfiles=true; ; ; in ...

  4. Maven 私服的简单使用

    所有的 Java 开发者应该是没有没用过 Maven 的吧.Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发.打包.测试.部署等一系列行为.而包管 ...

  5. 1.3WEB API 默认以json格式返回数据,同时定义时间格式,返回格式

    首先我们知道,web api 是可以返回任意类型的,然后在输出的过程中转为(默认的)xml. 但是xml是比较费流量的,而且大多前端都是用json对接,所以我们也只能随大流,把它输出改成json. 不 ...

  6. [转]map函数补充

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于li ...

  7. Mac终端开启代理

    使用shadowsocks开启代理,只支持浏览器开启代理,其他软件是不能够开启代理的,因为这个问题,自己一直无法用本地终端 git clone 一些库,网上查找方法,总结如下: 步骤一:开启shado ...

  8. codevs 搜索题汇总(黄金级)

    2801 LOL-盖伦的蹲草计划  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold   题目描述 Description 众所周知,LOL这款伟大的游戏,有个叫盖 ...

  9. [SCOI2016]幸运数字

    题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望 ...

  10. NOI2006 郁闷的出纳员

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...