Qt5 添加菜单图标资源图片

近日在学习豆子大神的Qt教程时撸了一段代码,但在给菜单栏菜单选项添加图标时,发现图标怎么都不显示。。。遂有此文,记录一下 Qt 工程添加图标资源的流程。

在这里插入图片描述

源代码片段是这样写的,但是就是不显示(文末有全部代码)

openAction = new QAction(QIcon(":/img/file-open.png"), tr("&Open..."), this);
//QIcon以:开始,意味着从资源文件中查找资源;第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。

无论是改成

openAction = new QAction(QIcon("/img/file-open.png"), tr("&Open..."), this);
//QIcon以:开始,意味着从资源文件中查找资源;第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。

还是

openAction = new QAction(QIcon("./img/file-open.png"), tr("&Open..."), this);
//QIcon以:开始,意味着从资源文件中查找资源;第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。

都不行!
奈何是没有将文件添加进工程,下面简述步骤:
未添加图标资源前,项目工具栏是这样的
在这里插入图片描述
y右击工程名 toolBar,选择 Add New…
在这里插入图片描述
在这里插入图片描述
选择 Qt Resouces File,下一步,因为要添加 icon 菜单图标,所以将资源命名为 icon
在这里插入图片描述
然后 next ,再finish,OK!
现在项目资源栏是这样的:
在这里插入图片描述
右击 icon.qrc,选择 添加已存在的文件
在这里插入图片描述
然后找到你要加载的图片,添加成功后:
在这里插入图片描述
再运行程序
在这里插入图片描述

把代码也贴一下吧,功能就是给窗口添加一个简单的菜单图标

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QAction *openAction;  // 定义打开文件操作
    void open();    // 打开文件函数
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAction>
#include <QToolBar>
#include <QStatusBar>
#include <QMessageBox>
#include <QMenuBar>
#include <QPixmap>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("Main window"));  // 设置窗口标题

    openAction = new QAction(QIcon(":img/file-open.png"), tr("&Open..."), this);
    //QIcon以:开始,意味着从资源文件中查找资源;第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。

    openAction->setShortcuts(QKeySequence::Open); // Qt自动分配快捷键,来保证不同系统可移植性

    openAction->setStatusTip(tr("打开文件"));
    // 实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示

    connect(openAction, &QAction::triggered, this, &MainWindow::open);

    QMenu *file = menuBar()->addMenu(tr("&File"));  // 创建菜单栏,并向其中添加 File 菜单
    file->addAction(openAction);    // File 菜单执行操作

    QToolBar *toolBar = addToolBar(tr("&File"));    // 创建工具栏,并向其中添加 File 菜单
    toolBar->addAction(openAction);

    statusBar();    // 状态栏,出现在窗口最下方,用于显示动作对象的提示信息
}

MainWindow::~MainWindow()
{
}

void MainWindow::open()
{
    QMessageBox::information(this, tr("Information"), tr("Open"));
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值