近日在学习豆子大神的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_Hmainwindow.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();}