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