Как сделать иконку из картинки, лежащей в одной папке с проектом?

173
21 декабря 2019, 09:30

Пытаюсь назначить иконку приложения. Подключил ее в ресурсном файле

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>../TLeater.jpg</file>
</qresource>
</RCC>

и вызвал в main.cpp

  w.setWindowIcon(QIcon("../TLeater.jpg"));

Выдает ошибку ресурсного файла. Как правильно обратиься к картинке, если она лежит в той же папке, что и весь проект? Если я правильно помню, к файлам, которые лежат в той же папке обращаются через ../ в с++

Полный путь к файлу работает

P.S исправил ../ на ./ в обоих файлах, но картика все равно не появляется.

Answer 1

Создал пустой проект, добавил файл ресурсов.

Первое, на что обратил внимание при добавлении файла ресурсов из Qt Creator, обязательное наличие префикса перед иконками (иначе попросту нельзя было добавить файлы, см. скриншот). Не могу объяснить, почему это так. Если кто-то просветит, то только приветствуется.

Затем добавил иконку в ресурсы и через дизайнер установил эту иконку в тайтл окна. Нажал "запустить". Удостоверился, что иконка подключилась правильно.

Глянул файл ресурсов в текстовом редакторе, получил такое:

<RCC>
    <qresource prefix="/icons">
        <file>edit-icon.png</file>
    </qresource>
</RCC>

Далее открыл файл ui_mainwindow.h (сгенерированный при сборке, лежит в папке с билдом) и поиском по ключевому слову "icon" нашел следующие строки:

QIcon icon;
icon.addFile(QStringLiteral(":/icons/edit-icon.png"), QSize(), QIcon::Normal, QIcon::Off);
MainWindow->setWindowIcon(icon);

Что из этого мы видим?

  1. Как правильно заполнить файл ресурсов (с учетом префикса).
  2. Как правильно обратиться к файлу из ресурсов (опять же с учетом префиска ":/icons/edit-icon.png").

Затем, имея готовый файл ресурсов и зная, как обратиться к иконке из ресурсов, очистил поле windowIcon в дизайнере, открыл mainwindow.cpp и в конструкторе вписал:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowIcon(QIcon(":/icons/edit-icon.png"));
}

В итоге все работает.

Answer 2

Ответ из коментариев:

QIcon(":/TLeater.jpg")

работает. Пошел читать документацию

Всем спасибо.

READ ALSO
Все ли файлы нужно загружать на GitHub?

Все ли файлы нужно загружать на GitHub?

Допустим хочу выгрузить android-проект на githubТак вот возник вопрос, может и глупый, но все же

196
Java test with Mock Controller

Java test with Mock Controller

У меня вопрос связанный с тестированием моего контроллера используя mockВ общем я создал проект используя MVC

217
Контекстное меню android не подключается

Контекстное меню android не подключается

пытаюсь подключить контекстное меню к элементам списка, но ничего не происходит, в чем может быть проблема?

230