QT Framewrok и Visual Studio - конфликт значков - PullRequest
0 голосов
/ 26 января 2020

Введение

Мне нужно установить значок, как для файла .exe, в верхнем левом углу окна моего приложения, так и на панели задач (Windows 10) , Однако это работает только частично - я могу установить значок .exe, но это все. В двух других местах у меня есть значок по умолчанию. Я работаю с QT 5.9.7 в Visual Studio 2017.

То, что я тестировал до сих пор

У меня есть следующая строка в моем файле .rc:

IDI_ICON1               ICON                    "favicon.ico"

Что позволяет мне иметь значок .exe. Но это, похоже, не влияет на остальную часть структуры. Я пытался установить значок в приложении таким образом (main.cpp):

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowIcon(QIcon(":/favicon.ico"));
    // a.setWindowIcon also doesn't work.
    return a.exec();
}

или даже внутри mainwindow.cpp

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

Однако, кажется, его игнорируют - он имеет никакого эффекта, также это не дает мне никакой ошибки. Я также попытался включить imageformats/qico.dll следующую ЭТУ инструкцию - все еще не повезло.

Вопрос

Итак - как установить эти два других иконки правильно - на панели задач Windows и в углу окна моего приложения?

РЕДАКТИРОВАТЬ: Добавление qrc файла также не решает проблему.

Ответы [ 2 ]

1 голос
/ 27 января 2020

Если вы не используете Creator / qmake, вам нужно выполнить шаги из документации Qt:

Если вы не используете qmake, необходимые шаги: во-первых, создайте. Файл rc и запустите программу r c или windres для файла .r c, затем свяжите ваше приложение с результирующим файлом .res.

Это создаст значок для Windows Explorer / Taskbar.

Верхний левый значок создается путем добавления его в файл qr c и компиляции его с помощью компилятора ресурсов. Этот значок нужно установить, вызвав app.setWindowIcon(QIcon(":/favicon.ico"));, где app - ваш экземпляр QApplication.

0 голосов
/ 27 января 2020

Я нашел решение, поэтому я опубликую его здесь, на случай, если кто-то еще столкнется с той же проблемой:

Прежде всего - вещь не имеет ничего общего с .rc или .qrc файл, значок можно даже загрузить прямо из каталога приложения. Проблема в поддерживаемых форматах - по какой-то причине в Windows 10 есть проблема с форматом .ico в QT framework. Теоретически добавление imageformats/qico.dll должно решить проблему, но это не так. Решение состоит в том, чтобы использовать другой формат (в моем случае .png) и поместить его непосредственно там, где находится файл .exe, а не в каком-либо подкаталоге. Затем вы можете назвать это так:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    a.setWindowIcon(QIcon("favicon.png"));
    return a.exec();
} 

В качестве альтернативы, если вы хотите, чтобы значок был скомпилирован в двоичном виде, вы можете попробовать добавить его к ресурсам, однако формат по-прежнему не должен быть .ico сделать это работает, так как это является источником проблемы. Размер значка настроен правильно, поэтому он хорошо смотрится как в углу окна приложения, так и на панели задач - поэтому в данном случае вполне достаточно .png.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...