Qt开发5--Qt5中菜单和工具栏

news2025/2/4 6:59:21

在这部分Qt5 C++编程教程中,讨论Qt5应用程序中菜单和工具栏。

一个菜单栏是一个GUI程序的常见部分。它是位于称为菜单的各种位置中的命令组。工具栏提供了对最常用命令的快速访问。

1) Qt5简单菜单

第一个例子展示显示一个简单菜单。以下是源代码,我们有一个菜单栏,菜单和一个操作。为了使用菜单,我们必须从一个QMainWindow部件继承。

/* simple_menu.h 头文件内容 */
#ifndef SIMPLE_MENU_H
#define SIMPLE_MENU_H
#include <QMainWindow>
#include <QApplication>


class simple_menu : public QMainWindow
{
public:
    simple_menu(QWidget * parent = nullptr);
};

#endif // SIMPLE_MENU_H


/* simple_menu.cpps实现代码 */
#include "simple_menu.h"
#include <QMenu>
#include <QMenuBar>

simple_menu::simple_menu(QWidget * parent) :QMainWindow(parent)
{
     // 此代码行创建了一个QAction。每个QMenu有以下一个或多个action对象
    auto * quit = new QAction("&Quit", this);

    // 创建一个QMenu对象。
    QMenu * file = menuBar()->addMenu("&File");
    // 使用addAction方法将一个action放入菜单中
    file->addAction(quit);

    // 当从菜单选择这个选项时,程序退出。
    connect(quit, &QAction::triggered, qApp, QApplication::quit);
}


/* 主程序main.cpp内容 */
#include <QApplication>
#include <QMainWindow>
#include "simple_menu.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    simple_menu window;

    window.resize(350, 250);
    window.setWindowTitle("Simpe Menu");
    window.show();

    return a.exec();
}

项目文件pro描述:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4):  QT += widgets printsupport

CONFIG += c++11

TARGET = firstmenu
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    simple_menu.cpp

HEADERS += \
    simple_menu.h

编译并且执行以上程序: 

2) Qt5图标,快捷方式和分隔符

 在以下示例中,我们进一步增强前面的程序。我们添加图标到菜单,使用快捷方式和分隔符。在本例中,创建了三个actions菜单。在我们选择它时,仅quit action将实际做事情。也创建了一个分隔符和一个终止程序的CTRL+Q快捷方式。

以下是源代码:

/* 头文件 */
#ifndef ANOTHERMENU_H
#define ANOTHERMENU_H
#include <QMainWindow>
#include <QApplication>
#include <QWidget>

class AnotherMenu : public QMainWindow
{
public:
    AnotherMenu(QWidget * parent = nullptr);
};

#endif // ANOTHERMENU_H

/* 实现文件 */
#include "anothermenu.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QPixmap>

AnotherMenu::AnotherMenu(QWidget * parent)
    :QMainWindow(parent)
{
    // 这些是我们在菜单中使用的图像。注意:某些桌面环境不在菜单中显示图像。
    QPixmap newpix("png/1.PNG");
    QPixmap openpix("png/2.PNG");
    QPixmap quitpix("png/3.png");

     // 使用pixmap作为第一个参数的QAction构造器。
    auto * newa = new QAction(newpix, "&New", this);
    auto * open = new QAction(openpix, "&Open", this);
    auto * quit = new QAction(quitpix, "&Quit", this);
     //  创建快捷方式。按下这个快捷键,将运行终止程序的quit action。
    quit->setShortcut(tr("CTRL+Q"));

    QMenu *file = menuBar()->addMenu("&File");
    file->addAction(newa);
    file->addAction(open);
    // 创建一个分隔符。此分隔符是水平线,它使我们把菜单actions分成某些逻辑组。
    file->addSeparator();
    file->addAction(quit);
    // 在某些环境中,菜单图标默认不显示。在这种情况中,可以禁用Qt::AA_DontShowIconsInMenus属性。
    qApp->setAttribute(Qt::AA_DontShowIconsInMenus, false);

    connect(quit, &QAction::triggered, qApp, &QApplication::quit);
}

/* 主程序main.cpp */
#include <QApplication>
#include "anothermenu.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    AnotherMenu window;

    window.resize(350,250);
    window.setWindowTitle("Another menu");
    window.show();

    return a.exec();
}

项目文件pro:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4):  QT += widgets printsupport

CONFIG += c++11

TARGET = anothermenu
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    anothermenu.cpp

HEADERS += \
    anothermenu.h

DISTFILES += \
    png/1.PNG \
    png/2.PNG \
    png/3.PNG

编译并且执行以上程序:

3) Qt5可复选菜单

在本例中,创建一个复选菜单。这是一个有复选框的action。这个选项切换状态栏可见性。

/* 头文件 */
#ifndef CHECKABLE_H
#define CHECKABLE_H
#include <QMainWindow>
#include <QApplication>
#include  <QAction>

class Checkable : public QMainWindow
{
    Q_OBJECT
public:
    explicit Checkable(QWidget *parent = 0);

signals:

private slots:
    void toggleStatusbar();

private:
    QAction * viewst;

public slots:
};

/* 实现文件 */
#include "checkable.h"
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>

Checkable::Checkable(QWidget *parent) : QMainWindow(parent)
{
    // 创建一个action并且用setCheckable方法使它可复选。
    // setChecked方法复选它。
    viewst = new QAction("&View statusbar", this);
    viewst->setCheckable(true);
    viewst->setChecked(true);

    QMenu * file = menuBar()->addMenu("&File");
    file->addAction(viewst);

    statusBar()->show();

    connect(viewst, &QAction::triggered, this, &Checkable::toggleStatusbar);

}

// 在toggleStatusbar方法中,我们决定是否选取菜单项并且相应的隐藏或显示状态栏
void Checkable::toggleStatusbar()
{
    if (viewst->isChecked()){
        printf("checked!\n");
        statusBar()->show();
    }
    else{
        statusBar()->hide();
        printf("unchecked!\n");
    }
}

/* 主程序 */
#include <QApplication>
#include "checkable.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Checkable window;

    window.resize(350, 250);
    window.setWindowTitle("Checkable Window");
    window.show();

    return a.exec();
}

4)Qt5 QToolBar

QToolBar类提供了一个可移动面板,它包含一个控件集合,它们提供对应用程序action的快速访问。

源代码如下:

/* 头文件 */
#ifndef TOOLBAR_H
#define TOOLBAR_H

#include <QMainWindow>
#include <QApplication>

class ToolBar : public QMainWindow
{
    Q_OBJECT
public:
    explicit ToolBar(QWidget *parent = 0);

signals:

public slots:
};

#endif // TOOLBAR_H

/* 实现文件 */
#include "toolbar.h"
#include <QToolBar>
#include <QIcon>
#include <QAction>

 // 创建一个工具栏,从QMainWidnow部件继承
ToolBar::ToolBar(QWidget *parent) : QMainWindow(parent)
{
    QPixmap newpix("png/1.PNG");
    QPixmap openpix("png/2.PNG");
    QPixmap quitpix("png/3.PNG");

    // addToolBar方法创建一个工具栏并且返回一个指向它的指针
    QToolBar * toolbar = addToolBar("main toolbar");
    // 我们在这里添加了两个action和一个分隔符到这个工具栏
    toolbar->addAction(QIcon(newpix), "New File");
    toolbar->addAction(QIcon(openpix), "Open File");
    toolbar->addSeparator();

    QAction * quit = toolbar->addAction(QIcon(quitpix), "Quit Application");

    connect(quit, &QAction::triggered, qApp, &QApplication::quit);
}

/* 主程序 */
#include <QApplication>
#include "toolbar.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    ToolBar window;

    window.resize(350, 250);
    window.setWindowTitle("QToolBar Window");
    window.show();

    return a.exec();
}

项目文件:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4):  QT += widgets printsupport

CONFIG += c++11

TARGET = toolbar
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    toolbar.cpp

HEADERS += \
    toolbar.h

DISTFILES += \
    png/1.PNG \
    png/2.PNG \
    png/3.PNG

编译执行以上文件:

5) Qt5程序框架

在本例中,我们创建了一个程序框架。这个示例主要基于QMainWindow部件。在此创建了一个工具栏和一个状态栏。

源代码:

/* 头文件 */
#ifndef SKELETON_H
#define SKELETON_H

#include <QMainWindow>

class Skeleton : public QMainWindow
{
    Q_OBJECT
public:
    explicit Skeleton(QWidget *parent = 0);

signals:

public slots:
};

/*  实现文件 */
#include "skeleton.h"
#include <QMainWindow>
#include <QApplication>
#include <QWidget>
#include <QMenu>
#include <QMenuBar>
#include <QToolBar>
#include <QTextEdit>
#include <QStatusBar>
#include <QIcon>
#include <QAction>

Skeleton::Skeleton(QWidget *parent) : QMainWindow(parent)
{
    QPixmap newpix("png/1.PNG");
    QPixmap  openpix("png/2.PNG");
    QPixmap quitpix("png/3.PNG");

    auto * quit = new QAction("&Quit", this);

    QMenu * file =menuBar()->addMenu("&File");
    file->addAction(quit);

    connect(quit, &QAction::triggered, qApp, &QApplication::quit);

    QToolBar * toolbar = addToolBar("main toolbar");
    toolbar->addAction(QIcon(newpix), "New File");
    toolbar->addAction(QIcon(openpix), "Open File");
    toolbar->addSeparator();
    QAction * quit2 = toolbar->addAction(QIcon(quitpix), "Quit Application");
    connect(quit2, &QAction::triggered, qApp, &QApplication::quit);

    /* 创建一个QTextEdit部件并且放置它在QMainWindow部件的中心部分 */
    auto * edit = new QTextEdit(this);
    setCentralWidget(edit);

    statusBar()->showMessage("Ready");
}

/* 主程序 */
#include <QApplication>
#include "skeleton.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Skeleton window;
    window.resize(350,250);
    window.setWindowTitle("Skeleton Window");
    window.show();

    return a.exec();
}

编译并且运行以上程序:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法 -- LeetCode】(021) 合并两个有序链表

1、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#…

【并发编程】深入理解并发工具类CountDownLatch

文章目录 前言一、初识 CountDownLatch二、CountDownLatch 的核心方法三、CountDownLatch 的应用场景应用场景一&#xff1a;等待多个线程任务执行完成应用场景二&#xff1a;等待外部资源初始化应用场景三&#xff1a;控制线程执行顺序 四、CountDownLatch 的源码分析核心方法…

mysql表主键自增过大问题

问题及项目环境 问题 最近在做项目时&#xff0c;发现我创建的每一个表的主键设置自增&#xff0c;在插入数据数据时会出现自增值过大的问题。 问题展示: 在后端执行Basemapper中的insert()方法时&#xff0c;数据库中的主键id字段为下: 且我在对应的实体类的设置为下: 我们…

mysql四种隔离级别以及原理

事务4大特性&#xff1a; 原子性&#xff1a; undolog日志来保证&#xff0c; 记录了要回滚的日志信息&#xff0c; 事务回滚时撤销已经执行的sql. 一致性&#xff1a;由其它3大特性来保证。 隔离性: MVCC来保证&#xff0c; 多版本并发控制。 持久性&#xff1a;由redolog来保…

flask路由、模板、请求与响应、闪现以及请求扩展

一、函数加装饰器的执行顺序 flask的路由基于装饰器---->在视图函数上再加装饰器---->加多个装饰器的执行顺序---->登录认证装饰器---->加载router下,先做路由匹配,匹配成功执行被auth包裹的视图函数 二、路由系统 flask的路由是基于装饰器的---->但是它的…

APB/AHB/AXI总线介绍和理解

APB/AHB/AXI总线介绍&#xff1a; APB/AHB/AXI均属于AMBA (Advanced Microcontroller Bus Architecture)&#xff0c;常用于SoC设计中&#xff0c;全称叫作高级微控制器总线架构&#xff0c;它是由ARM公司研发推出的高性能片上总线协议。 AMBA 1.0还包含ASB和APB&#xff08;A…

MP4格式视频怎么转mov格式?好用的视频格式转换方法分享

MOV格式是苹果公司的专有格式&#xff0c;因此在苹果设备上播放MOV格式的视频时&#xff0c;兼容性更好&#xff0c;因此可以实现更高质量的视频。如果我们需要高质量的视频输出&#xff0c;将MP4转换为MOV格式可能是个好选择。那么怎么进行转换呢&#xff1f;给大家分享几种简…

Linux环境下,Nginx+Naocs远程访问碰到的若干问题

一、配置背景 该项目来源于尚硅谷SpringCloud进阶课程&#xff0c;在linux环境下配置一个注册中心组。 二、碰到的问题 问题主要是远程访问Nginx显示无法连接的问题&#xff0c;接下来是排查方案&#xff1a; 1. 防火墙问题 这里需要确保双方电脑能ping通之后确保端口也能…

k210获取机器码

准备工作&#xff1a; kflash_gui&#xff08;下载固件到开发板&#xff09; key_gen_v1.2&#xff08;需要将其下载至开发板&#xff09; 1.kflash_gui 下载地址&#xff1a;Releases sipeed/kflash_gui GitHub 2. key_gen_v1.2下载地址&#xff1a;下载站 - Sipeed 3.…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升&#xff0c;如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路&#xff0c;以CentOS为例&#xff0c;总结为4步。 第1步&#xff0c;使用top命令找到占用CPU高的进程。 第2步&#xff0c;使用ps –mp命令找到进程下…

Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布 <!-- canvas元素默认是行内块元素 --> <divclass"model"style"background-color: #ff0000;"width"300"height"180" ></div>画布随窗口变化 // 画布跟随窗口变化 window.onresize fun…

cmake的一个测试demo

目录 一、ubuntu中安装cmake二、单个源文件main.cCMakeLists.txt的编写 三、多个源文件main.ctest1.ctest1.hCMakeLists.txt的编写 一、ubuntu中安装cmake sudo apt-get install cmake查看cmake的版本号 cmake --version二、单个源文件 main.c #include<stdio.h>int …

【微信小程序-uniapp】CustomButton 自定义常用吸底按钮组件

1. 效果图 2. 组件完整代码 <template><view:class="[custom-btn flex-center, size == big ? big : mid, type == primary ? primary : info, plain ? plain : , disabled ? disabled : , round ? round : ]"

苹果笔买原装的还是随便买?ipad触控笔推荐

当像iPad这样的平板电脑功能变得越来越强&#xff0c;能够承载的功能也会越来越多&#xff0c;并且会越来越多地渗透到我们的日常生活和工作中。随着电子设备的更新和软件的不断完善&#xff0c;电容笔的性能也在不断的提升&#xff0c;因此如何挑选一款相对好用的电容笔&#…

【Kafka】Ubuntu 部署kafka中间件,实现Django生产和消费

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Kafka安装1.下载并安装Java2.下载和解压 Kafka3.配置 Kafka4.启动 Kafka5.创建主题和生产者/消费者6.发布和订阅消息 二、KafkaDjang…

AIS报文解析

!AIVDM,1,1,A,13u?etPv2;0n:dDPwUM1U1Cb069D,023* 我们知道消息内容就是13u?etPv2;0n:dDPwUM1U1Cb069D&#xff0c;这是一串ASCII码字符串&#xff0c;我们可以获取其对应的ASCII码数值。 但是在AIS的编码表不需要这么多符号&#xff0c;所以截取了其中一部分&#xff0c;如…

良心推荐!5款支持Linux系统的国产软件,兼容国产操作系统

虽然市面上大多数用户使用的是Windows操作系统&#xff0c;但也有不少使用Linux系统的用户&#xff0c;特别是国产操作系统的崛起&#xff0c;让Linux系统阵营的用户越来越多。Linux不像Windows那样&#xff0c;有着完整的生态环境丰富的软件应用&#xff0c;但也逐渐在完善中&…

探秘Session跨页面传递数据的神奇力量

探秘Session跨页面传递数据的神奇力量 前言一、什么是 Session 会话?二、如何创建 Session 和获取(id 号,是否为新)三、Session 域数据的存取四、Session 生命周期控制五、Session的销毁五、浏览器和 Session 之间关联的技术内幕 前言 本博主将用CSDN记录软件开发求学之路上亲…

自定义类型详解(结构体、枚举、联合)

目录 一、结构体 1.1结构体的认识&#xff1a; 1.2结构体的声明 1.先声明结构体类型&#xff0c;再定义该类型的变量 2.在声明类型的同时定义 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体的初始化和访问 1.6结构体内存对齐 1.7修改默认对齐数 1.8结构体传参 二…

驱动程序和应用程序

驱动程序和应用程序 一、应用程序和驱动程序如何关联起来的 1、文件描述符fp 与 struct file 应用程序&#xff08;APP&#xff09;在打开文件时&#xff0c;可以得到一个整数&#xff0c;这个整数被称为文件句柄。对于 APP 的每一个文件句柄&#xff0c;在内核里面都有一个…