前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >13.QT-QMainWindow组件使用

13.QT-QMainWindow组件使用

作者头像
诺谦
发布2018-05-28 15:41:51
2.2K0
发布2018-05-28 15:41:51
举报
文章被收录于专栏:Linux驱动Linux驱动

QMainWindow介绍

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

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

QMainWindow组件布局

1.菜单栏

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

创建菜单示例:

代码语言:javascript
复制
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关键成员函数

代码语言:javascript
复制
void setFloatable ( bool floatable );
       //设置工具栏是否可以当做独立的窗口,停靠在上下左右窗口旁,,默认为true

void setMovable(bool movable);
       //设置工具栏是否可以自动移动,停靠在任意处,默认为true

void setIconSize ( const QSize & iconSize );
       //设置工具栏中的每个图标大小

创建工具栏示例:

代码语言:javascript
复制
 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类的构造函数里写入:

代码语言:javascript
复制
    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类,如下图所示:

常用函数:

代码语言:javascript
复制
QStatusBar *  statusBar ();
//获取当前类的状态栏,如果状态栏没有创建,则返回一个空的状态栏

void  showMessage ( const QString & message, int timeout = 0 ) ;
//在状态栏下左下部显示信息, timeout 的单位是ms,timeout倒计时完会调用clearMessage()

void clearMessage () 
//清除消息

创建状态栏示例:

代码语言:javascript
复制
        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(200);      //设置最小宽度,避免与旁边的信息紧靠在一起
        status2->setMinimumWidth(200);

        sb->addPermanentWidget(status1);
        sb->addPermanentWidget(status2);

效果:

文本编辑组件

 QT中提供了三种文本编辑组件

  • QLineEdit :单行文本编辑组件
  • QTextEdit:多行富文本编辑组件(类似于word编辑,可以实现图片,个别文字的字体,颜色等编辑)
  • QPlainTextEdit:多行普通文本编辑组件(类似于记事本编辑) 

Qt,在文本编辑组件里自带了右键式菜单

可以实现复制,粘贴,剪切等,以QTextEdit为例:

 常用函数

代码语言:javascript
复制
QMenu * QLineEdit::createStandardContextMenu();
                            //获取右击菜单内容
menu->addAction(tr("My Menu Item"));
                            //添加右击菜单内容
addAction(QAction *action, ActionPosition position);
                  //可以在编辑框的开始或者末尾添加一个action,方便我们操作,一个完美的搜索框顿时出现。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档