【VS Code 与 Qt6】QAction 类的一些事

这篇具有很好参考价值的文章主要介绍了【VS Code 与 Qt6】QAction 类的一些事。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

QAction 类表示用户命令的一种抽象,包括命令文本、图标、命令触发后要执行的代码。菜单、工具栏按钮往往存在相同的功能,将这些命令独立抽出来,放到 QAction 以象上,可避免编写重复的代码。比如“文件”菜单下有“保存”命令,工具栏上也会有“保存”按钮。因此,创建一个表示“保存”的 QAction 对象,同时添加到菜单和工具栏中,它们就能共享相同的功能。

以上F话了这么多,就是为了明确 QAction 类的作用。在创建 QAction 实例时,可以通过构造函数传递命令的文本,或图标。如果在调用构造函数时不指定,那么可以用下面这些方法来“补做”:

1、setText 方法:设置命令文本。显示在用户界面上的文本;

2、setIcon 方法:看名识义,就是设置图标;

3、setFont 方法:在呈现命令文本时用的字体。一般不需要特意去指定字体,它会继承应用程序的默认字体;

4、setShortcut:设置命令的快捷键。

QAction 类有个核心的信号:triggered,当用户通过点击或快捷键激活菜单项或工具栏按钮,就会发出 triggered 信号。

 文章来源地址https://www.toymoban.com/news/detail-612639.html

下面咱们做个简单的例子。这里我用到了 QMainWindow 类来充当主窗口,因为它的“窗口功能”比较完善,创建个菜单栏、工具栏和状态栏的都比较方便。

CMake 文件:

cmake_minimum_required(VERSION 3.20)
# 项目
project(myApp VERSION 1.0.0 LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Gui Core Widgets)
# 开启MOC
set(CMAKE_AUTOMOC ON)
# 语言标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 源文件
add_executable(app WIN32 me.cpp)
target_link_libraries(app PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)

me.cpp 文件:

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMessageBox>
#include <QMenu>
#include <QAction>
#include <QIcon>

// 这三个逗丁用来接收信号的,slot 函数
void onNew();
void onSave();
void onExit();

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    // 创建主窗口
    QMainWindow win;
    // 窗口标题
    win.setWindowTitle("整活儿");
    // 这样获取,默认会创建空的菜单栏
    QMenuBar* menubar = win.menuBar();
    // 添加“文件”菜单
    QMenu* fileMenu = menubar -> addMenu("文件");
    // 创建三个QAction对象
    QAction *act1 = new QAction("新建", &win);
    QAction *act2 = new QAction("保存", &win);
    QAction *act3 = new QAction("退出", &win);
    // 连接triggered信号
    QObject::connect(act1, &QAction::triggered, &onNew);
    QObject::connect(act2, &QAction::triggered, &onSave);
    QObject::connect(act3, &QAction::triggered, &onExit);
    // 把三个action添加到菜单中
    fileMenu->addAction(act1);
    fileMenu->addAction(act2);
    fileMenu->addAction(act3);

    // 显示主窗口
    win.show();
    // 进入事件循环
    return QApplication::exec();
}

void onNew()
{
    QMessageBox::information(nullptr, "提示", "新建文件");
}

void onSave()
{
    QMessageBox::information(nullptr, "提示", "保存文件");
}

void onExit()
{
    QApplication::exit();
}

QMainWindow 的 menuBar 方法用来获取菜单栏(QMenuBar)引用的。但,当窗口中未设置过菜单栏时,它会自动创建一个空菜单栏,并将其引用返回。返回的 QMenu 对象表示菜单,调用它的 addAction 方法就能添加菜单项了。菜单项用 QAction 表示。

onNew、onSave、onExit 这三个函数分别作为三个 QAction 对象的 slot 函数,接收 triggered 信号。

运行后,你会看到,QAction 对象指定的文本,会自动呈现在菜单文本中。

【VS Code 与 Qt6】QAction 类的一些事

 

通常,为了让菜单命令更直观,咱们会在重要的菜单项上加上图标。接下来给上述三个 action 添上小图标。这里老周介绍一个获取图标的网站,很好用,要啥图标,进去后直接搜索就行,而且可以选择多尺寸下载。比那些要强制登录才能用的骚站好很多。

浏览器打开 Download 1,301,500 free icons (SVG, PNG) (icons8.com)

菜单上的图标,用 16×16 就够了。把图标文件放在与应用程序可执行文件相同的路径下,依次命名为 new.png、save.png、exit.png。

接着,改一下代码,需要用 QAction 带 QIcon 参数的构造函数。

QAction *act1 = new QAction(QIcon("new.png"), "新建", &win);
QAction *act2 = new QAction(QIcon("save.png"), "保存", &win);
QAction *act3 = new QAction(QIcon("exit.png"), "退出", &win);

再次编译,运行,效果如下:

【VS Code 与 Qt6】QAction 类的一些事

 

对于常用的命令,有快捷键能大大提升效率。快捷键需要用到 QKeySequence 类。该类在 QtGui 基础模块中。这个类在调用构造函数时有一种特特简单的用法,就是直接用字符串来描述快捷键。这些字符要求是人类可读性较高的。比如下面这些:

Ctrl+F               // Ctrl + F
Shift+H             // Shift+ H
Alt+W
Ctrl+Alt+E
F5           // 就是 F5    
D            // 就是字母D

给上面示例的三个菜单加上快捷键。

act1->setShortcut(QKeySequence("Ctrl+N"));
act2->setShortcut(QKeySequence("ctrl+S"));
act3->setShortcut(QKeySequence("Alt+E"));

描述按键的字符串不区分大小写,所以,“Alt+E”和“alt+e”一样。快捷键会显示在菜单命令文本的右边。如下所示

【VS Code 与 Qt6】QAction 类的一些事

这时候,只要按下 Alt + E,程序就会退出。

 

应用程序除了菜单栏,通常还有工具栏(QToolBar)。QAction 类是命令的抽象,它可以在菜单栏与工具栏之间共用。所以,咱们上面的示例也可以加上工具栏。

// 创建三个QAction对象
QAction *act1 = new QAction(QIcon("new.png"), "新建", &win);
QAction *act2 = new QAction(QIcon("save.png"), "保存", &win);
QAction *act3 = new QAction(QIcon("exit.png"), "退出", &win);
……
// 创建工具栏
QToolBar *toolbar = new QToolBar(&win);
// 将那三个命令添加到工具栏
toolbar->addAction(act1);
toolbar->addAction(act2);
toolbar->addAction(act3);
// 工具栏添加到主窗口
win.addToolBar(toolbar);

重新编译运行,结果如下:

【VS Code 与 Qt6】QAction 类的一些事

 

QAction 的 triggered 信号是这样定义的:

void QAction::triggered(bool checked = false)

它有个 bool 类型的参数,默认是 false。干吗用的呢?这是处理带 check 功能的菜单用的。就是那种点一下 on,再点一下 off 的那种。咱们在上面的示例中增加一个“开机启动”菜单项。

QAction *act4 = new QAction("开机启动", &win);
// 开启check功能
act4->setCheckable(true);

QObject::connect(act4, &QAction::triggered, &onAutoStart);
fileMenu->addAction(act4);

// 这个是slot函数
void onAutoStart(bool checked)
{
    if(checked){
        QMessageBox::information(nullptr,"提示", "程序开机启动");
    }
    else
    {
        QMessageBox::information(nullptr,"提示","已取消开机启动");
    }
}

setCheckable 方法如果传递 true,表示开启 check 功能;若 false,关闭 check 功能。

当可check菜单处于 on 状态时,它前面会显示一个勾。如下图所示:

【VS Code 与 Qt6】QAction 类的一些事

 

有些时候,菜单命令的默认用户界面不太符合需要。为了方便用户操作,我可能想放一个别的 Widget 上去(比如放个滑块条)。QAction 类做不到这个,但它的派生类可以:QWidgetAction。

咱们在菜单栏上添加一个显示 QSpinBox 组件的命令。

// 创建spinBox组件
QSpinBox *spinbox = new QSpinBox(&win);
spinbox->show();
// 设置一下范围0-300
spinbox->setRange(0, 300);
// 默认显示的值50
spinbox->setValue(50);
// 将它放到工具栏和菜单上
QWidgetAction *act5 = new QWidgetAction(&win);
act5->setDefaultWidget(spinbox);

fileMenu->addAction(act5);

QWidgetAction 在实例化后,调用 setDefaultWidget 方法关联要显示在菜单上的组件即可。当然,咱们可以从 QWidgetAction 类派生出自己的类,来实现更高级的需求。这个老周留到下次写水文时再说。

编译运行,看看菜单的最后一项,有趣吧。

【VS Code 与 Qt6】QAction 类的一些事

 

==========================================================================

好了,今天的话题就聊完了。下面又是老周讲故事时间。

以前老周分享过改 VS Code 全窗口背景的方法,就是设置 <body> 元素的背景图,然后适当调一调透明度。

但,如果你不喜欢那样覆盖整个窗口,我只是想打开代码编辑器时才看到背景图呢。嗯,也就是只设置编辑器的背景图。原理一样,都是改 CSS 样式。打开VS Code程序目录下的 resources\app\out\vs\workbench\workbench.desktop.main.css 样式表,添加以下样式:

.monaco-editor, .monaco-editor-background {
  background: center/32% no-repeat url('vscode-file://vscode-app/c:/users/mmm/pictures/bg/20.png') !important;
}

对的,就是设置 background 属性,后面的 important 表示强行覆盖,不然不会生效。图片URL 是 vscode-file 协议,加上 vscode-app 前缀,然后就是图片的完整路径。center/32% 表示图片居中对齐,32% 是缩小图片,变为原尺寸的32%,这个你得根据你的图片自己调,调到合适就好。

建议使用透明背景的 PNG 图片,因为太花的图片会干扰你写代码的。CSS 不要用 opacity 来调整透明度,因为这样一调,连代码的透明度也跟着变了,很影响视线,看不清代码,容易导致高度近视。咱们可以在图片上做手脚,就是让原图也具有一定的透明度。

方法是用 PS 打开图片,在图层面板的“不透明度”,改为 15-20% ,具体哪个值你也可以试试,只要看着舒服就行。

【VS Code 与 Qt6】QAction 类的一些事

设置完后,效果如下:

【VS Code 与 Qt6】QAction 类的一些事

《初代萌王陪我写代码》,岂不美哉!

 

到了这里,关于【VS Code 与 Qt6】QAction 类的一些事的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VS2019搭建QT6.4开发环境【多图警告^-^】

    安装很简单,这里就不再赘述。 附上VS下载地址:Visual Studio 全家桶 这里就不绕弯子,先说明从5.15版本开始,qt需要下载在线下载器安装。 ** QT下载地址** ; 推荐使用网易邮箱或者QQ邮箱注册,因为会有回执确认操作。 勾选第二条,不要发送信息: 重点选择两个MSVC和MinGW:

    2024年02月04日
    浏览(63)
  • Qt6.5.1+WebRTC学习笔记(十)开发环境搭建(win10+vs2022)

    1.操作系统win10 64位 2.合理的上网方式,需要正常访问google,最好有40G以上流量 3.安装VS2022,笔者使用的是社区版,并选中C++相关,笔者设置如下        注意,win10的sdk需要是10.0.22621.0,其他版本可能导致编译不通过,而且这个版本会根据webrtc源码的更新而发生变化  4.安装

    2024年02月08日
    浏览(51)
  • VS2022配置QT6.4.3的详细步骤(2023年最新版安装教程)

         本文包含了 QT在线安装器的安装过程,QT的安装过程,QT的环境配置,VS的环境配置 QT在线安装器的百度云资源 希望可以帮助大家解决安装过程中出现的各种问题。         前些天,听完了C++的基础课程想下载个QT学一下前端操作,但是在安装的时候却出现了一些问题,

    2023年04月26日
    浏览(56)
  • Win10/11平台OBS-Studio 源码联合QT6.3和VS2019编译教程

    本文默认编译64位程序。 下载源码可以通过Git下载,也可以直接下载zip文件。 通过Git下载 打开OBS-Studio的GitHub编译安装指导页[obs-studio wiki](Build Instructions For Windows · obsproject/obs-studio Wiki (github.com)),按照Option B: Custom Windows builds方法安装(当然,这种方法需要你提前装好[Git](

    2024年02月10日
    浏览(65)
  • Qt6 第一天认识基本模块、附加模块、支持的平台、QML用户界面

    Qt 5在很多年前发布,引入了一种新的声明方式来编写令人惊叹的用户界面。从那时起,我们周围的世界发生了很大的变化。 Qt 6将是Qt 5的延续,不会对大多数用户造成干扰。是什么让Qt对用户有价值? 它的跨平台特性 它的可扩展性 世界一流的API和文档 可维护性、稳定性和兼

    2024年02月13日
    浏览(48)
  • Visual Studio Code(中文英切换,主题更换,等一些常用命令)

    目录 切换成中文界面 切换回英文界面 主题更换 常用命令 安装Visual Studio Code后,界面默认以英语显示。 VS Code支持将界面语言更改为其他语言。以下介绍如何将界面语言更改为中/英文。 点击左侧最下面的一个  在输入框中搜索 Chinese 点击 Install 安装 然后它会让重启下就好了

    2024年02月08日
    浏览(41)
  • 【VS Code插件开发】自定义指令实现 git 命令 (九)

    🐱 个人主页: 不叫猫先生 ,公众号: 前端舵手 🙋‍♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! ✨优质专栏:VS Code插件开发极速入门 📢 资料领取:前端进阶资料可以找我免费领取 我们通常会通过小乌龟、SourceTree、终端等实

    2024年03月14日
    浏览(65)
  • Qt之菜单栏、工具栏、状态栏介绍及工具栏QAction的动态增删显示实现方式

    目的 端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思路。 效果 先看下

    2024年02月08日
    浏览(50)
  • QT5 creator创建项目移植VS2015时一些问题的解决方案(MSB307错误、.ui无法编译)

    将QT5项目移植VS2015工程的方案中,我目前体验过的最便捷的一条路线是: 1.利用QT5 Creator创建项目(不需要进行界面设计),得到XXX.h /XXX.cpp /XXX.ui (暂时不需要编译自动生成的ui_XXX.h); 2.复制以上文件到VS工程源码目录下,.ui与头文件目录相同,并进行CMAKE编译、项目生成(

    2024年02月15日
    浏览(49)
  • Java on VS Code 8月更新|反编译器用户体验优化、新 Maven 项目工作流、代码高亮稳定性提升

    作者:Nick Zhu 排版:Alan Wang 大家好,欢迎来到 Visual Studio Code for Java 的 8 月更新!在这篇博客中,我们将为您提供有关反编译器支持的更多改进。此外,我们将展示如何创建没有原型的 Maven 项目以及一项重要错误修复。让我们开始吧! 上一篇博客中将强大的 Fernflower 反编译

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包