【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow

2023-11-12

1. 窗口应用布局样式及组成

PC端软件,最基本的一个窗口应用布局样式,如下:

 

大体可分为菜单栏、工具栏、状态栏、核心窗口、浮动窗口,使用时按需相互组合。

 

2. Qt中调用这些控件

 

1)新建一个工程:使用QMainWindow类。

 

2)例程源码:(具体使用方法在注释里)

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QToolBar>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(480, 320);
    setWindowTitle("Hello");

    // 菜单栏,菜单栏在工程中已经有力的,直接调用函数就行,不用add
    QMenuBar *mBar = menuBar();
    // 添加菜单(菜单栏里的对象),返回项目指针
    QMenu *pFile = mBar->addMenu("文件");
    // 添加菜单项(菜单栏里的项目,对对象的操作),并且添加动作
    QAction *pNew = pFile->addAction("新建");

    connect( pNew, &QAction::triggered,
             [=]()
            {
                qDebug() << "新建被按下";
            });

    pFile->addSeparator();// 添加分割线

    // 添加菜单项(菜单栏里项目的项目),并且添加动作
    QAction *pOpen = pFile->addAction("打开");

    connect( pOpen, &QAction::triggered,
             [=]()
            {
                qDebug() << "打开被按下";
            });

    // 工具栏,实质上是菜单项的快捷方式
    QToolBar *toolBar = addToolBar("toolBar");
    // 工具栏添加快捷键(直接将菜单项指针复制过来)
    toolBar->addAction(pNew);

    // 添加按钮到工具栏(平常软件中带图标的快捷方式都是按钮,)
    QPushButton *btnNew = new QPushButton;
    btnNew->setText("新建");
    toolBar->addWidget(btnNew);
    // 添加信号槽
    connect( btnNew, &QPushButton::clicked,
             [=]()
            {
                btnNew->setText("Done!");
            });

    // 状态栏,#include <QStatusBar>
    QStatusBar *sBar = statusBar();
    // 状态栏的项目叫做标签,#include <QLabel>
    QLabel *label = new QLabel(this);
    label->setText("Normal text file");
    // 从左往右依次添加
    sBar->addWidget(label);
    sBar->addWidget(new QLabel("New label", this));
    // 从右往左依次添加
    sBar->addPermanentWidget(new QLabel("Right label", this));

    // 核心控件。文本框,#include <QTextEdit>
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);// 设立中心

    // 浮动窗口,#include <QDockWidget>
    QDockWidget *dock = new QDockWidget(this);
    // 防止在窗口右侧
    addDockWidget(Qt::RightDockWidgetArea, dock);

    // 浮动窗口中添加控件,文本编辑区
    QTextEdit *textEditDock = new QTextEdit(this);
    dock->setWidget(textEditDock);
}

MainWindow::~MainWindow()
{
}

 

3)运行现象:(状态栏、浮动窗口都可以拖动)

     

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow 的相关文章

随机推荐

  • 第七课:BootRom的烧录

    目录 2 5 烧录BootRom 2 5 1 P2020 e500核 上电启动及boot流程 2 5 2 烧录BootRom到NorFlash 2 5 2 1 CodeWarrior的介绍
  • QT定时器

    QTimer使用 添加头文件 include
  • 推荐一个很适合程序员的副业!

    推荐一个超级赞的副业就是有声书录制 从2013年到现在已经火了9年时间 可谓是源远流长 这个兴趣爱好衍生出来的副业已经承载了上百万小白从业人员 头部主播的年收入都破了百万 有声书录制的发展历程可以概括为 或许曾经混沌 但必定未来可期 判断一
  • windows核心编程-杨波-专题视频课程

    windows核心编程 422人已学习 课程介绍 SDK 软件开发工具包 Software Development Kit SDK 一般是一些被软件工程师用于为特定的软件包 软件框架 硬件平台 作业系统等创建应用软件的开发工具的集合 MFC
  • Go语言基础(一)之函数调用、传参、反射机制、类型断言与转换

    Go语言基础 一 之函数调用 传参 反射机制 1 1 函数调用 package main func myFunction a b int int int return a b a b func main myFunction 66 77 使
  • 观察者模式实践-实现winform 窗体之间传值(事件实现)

    事件本身就是观察者模式的一个实现 先总结一下事件的使用 委托类型声明 定义发布者类 并声明事件 在发布者类中定义触发事件方法 定义订阅者类 并注册事件 在订阅者类中定义事件处理方法 针对事件 Net Framework提供了一个标准模式 主
  • linux epoll 非阻塞,Linux epoll 非阻塞connect

    为什么需要非阻塞connect 建立当前连接与其浪费等待 不如同时做些其它有意义的工作 可以异步建立多个连接 可以借助select epoll等系统调用设置合适的连接超时 而阻塞情况下只得等待默认的超时 网络上的文章大多是使用select来
  • PostgreSQL数据库保存图片

    一 postgresql 数据库的安装和配置 主要用到的命令 安装 PostgreSQL sudo apt get update sudo apt get install postgresql postgresql client 安装完毕后
  • 匿名内部类创建线程的两种方式

    我们知道多线程的实现有两种方式 一种是继承Thread类 另一种是实现Runnable接口 然后再重写run方法 最后开启线程 我们在普通的创建线程中 显然是比较麻烦的 那么有没有一个简单的方法呢 今天给大家介绍使用匿名内部类创建线程 为什
  • js逆向系列:企名片,获取js逆向后的真实数据!

    一 进入企名片创业项目 我们需要爬取如下数据 首先 对该网页进行抓包 发现这些数据是通过post请求获得的 这是网站给我们返回的数据 为什么和网页上显示的不一样呢 分析后得出 这是经过js加密后的数据 为了防止爬虫 网页对数据进行了加密 因
  • 没有50W彩礼,该怎么办

    大家好 我是才哥 刚过完春节 作为到了已婚甚至被催婚年龄的我们也开始讨论一个自古既有的话题 彩礼 今天上午 看到朋友圈刷屏了一个B站UP主的视频 没有50W彩礼 女朋友被强行拖走 我该怎么办 看完视频只想说 https www bilibi
  • Android面经_安卓面经(25/30)之MVC、MVP、MVVM全解析

    系列专栏 安卓高频面经解析大全专栏链接 150道安卓高频面试题全解析 安卓高频面经解析大全目录详情 安卓面经 anroid面经 150道安卓常见基础面试题全解析 安卓系统Framework面经专栏 Android系统Framework面试题
  • Python 5大常用魔术方法汇总

    前言 Python 中 以双下划线 包起来的方法 统称为 魔术方法 Magic Method 魔术方法是一个类或对象中的特殊方法 和普通方法的区别在于 普通方法需要手动调用 而魔术方法是在特定时刻自动触发执行的 如果希望根据自己的程序定制自
  • 开放原子开源基金会秘书长孙文龙:要打造以开发者为本的开源服务平台

    7月28日 2022开放原子全球开源峰会在北京亦创国际会展中心隆重举行开幕式 开放原子开源基金会秘书长孙文龙发表题为 凝心聚力 共拓开源 的演讲 开源开放 应运而生 开放原子开源基金会于2020年6月正式成立 作为我国首家开源基金会 也是目
  • 第一个solidity程序

    一 示例程序 SPDX License Identifier GPL 3 0 pragma solidity gt 0 4 16 lt 0 9 0 contract SimpleStorage uint storedData functio
  • 487. 金明的预算方案

    Powered by NEFU AB IN Link 文章目录 487 金明的预算方案 题意 思路 代码 487 金明的预算方案 题意 略 思路 可以将每个主件及其附件看作一个物品组 记主件为 p 两个附件为 a b 则最多一共有4种组合
  • ftp的passive模式

    昨天调试了半天的ftp passive模式 记录一下 今天在一台测试服务器上搭建ftp 折腾了许久 主要是不了解ftp的passive模式和port模式的区别 这里记录一下 和passive模式对应的叫做port模式 也叫做standard
  • Vue进阶——Vue CLI

    Vue进阶 Vue CLI 前言 一 什么是Vue CLI 二 怎么安装Vue CLI 1 Node 版本要求 2 已安装旧版本 3 安装完成 三 Vue CLI 创建Vue项目 1 Vue ui项目创建 1 1 预设 1 2 项目功能 1
  • Realme的Login接入过程记录

    为什么80 的码农都做不了架构师 gt gt gt 1 问题的提出 近期要使用Realme作为第三方接入 因为研究了一下Realme的请求过程 Request 和响应 Response 其中包含了一些加密和解密的方式 我们接下来分别从Req
  • 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow

    1 窗口应用布局样式及组成 PC端软件 最基本的一个窗口应用布局样式 如下 大体可分为菜单栏 工具栏 状态栏 核心窗口 浮动窗口 使用时按需相互组合 2 Qt中调用这些控件 1 新建一个工程 使用QMainWindow类 2 例程源码 具体