知方号

知方号

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 class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = nullptr); ~MainWindow();private: QAction *openAction; // 定义打开文件操作 void open(); // 打开文件函数};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include #include #include #include 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 int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。