Использование стандартных значков Qt из Qt Creator

Я хотел бы использовать значки Qt Standard (как здесь). Я нашел много примеров, как установить значки программно (время выполнения в коде).

Однако, как я могу установить "стандартное имя значка" (например, application-exit) в Qt Creator? Этот блог здесь говорит: я просто задаю тему соответствующему имени. Но у меня нет такого свойства theme, я бы получил всплывающее окно с ресурсом (снимок экрана ниже).

Где подходящее место для применения "стандартного имени" (например, application-exit)? Забастовкa >

Обновление с 2.4.x до Qt Creator 2.5.2 дает мне свойство "theme" из вышеприведенного блога, но до сих пор нет видимых значков. Что еще нужно, чтобы сделать иконки видимыми?

Theme now available with Creator 2.5.2

Замечание Qt 4.8.1, теперь обновленное до 2.5.2, Windows 7

Ответы

Ответ 1

Значки тем поддерживаются только в Linux/X11. В Windows и OS X вы должны предоставить свои собственные значки.

Решение этой проблемы - установить имя темы в QtCreator (как в вашем примере). Затем вам нужно предоставить иконки одного и того же псевдонима под префиксом ":/icons" в ваших ресурсах. Вы можете использовать значки из наборов, доступных в общедоступном домене, например. популярный набор иконок Tango.

Если вы ориентируетесь только на платформу Windows, настройка темы вам не подходит. Если вы ориентируетесь как на Linux/X11, так и на другие платформы, с этим решением вы получаете собственные значки в одной системе и значки, которые вы предоставляете себе на других.

Вы можете найти очень хорошее объяснение, как это сделать здесь: http://mithatkonar.com/wiki/doku.php/qt/icons

Ответ 2

К сожалению, эта опция темы значка через Qt Designer недоступна в Windows.

Ответ 3

@ypnos предложила отличную ссылку с несколькими подходами для решения проблемы. Я любимый последний - Создание пользовательской темы значка. Автор заявляет о трех плюсах (доступно для всех платформ, Отличное изменение размера, Обложки всех необходимых значков) и двух минусов (Не соответствует теме значка системы, Pain in the ass для реализации). Здесь я предлагаю улучшения, чтобы избавиться от недостатков.

Я клонировал набор иконок Tango из github. Репозиторий https://github.com/ppinard/qtango уже содержит файл index.theme. Но в основном это приносит Python script generate_rcc.py, который может автоматически генерировать файл *.qrc. Мне просто пришлось изменить аргументы subprocess.check_call() от '--binary' и '--compress' до '-binary' и '-compress'. Сгенерированный файл содержит абсолютные пути, но это легко найти и заменить. Этот script можно использовать для любого набора значков - первый трудоемкий шаг разрешен.

Теперь, используя свойство "Тема", вы можете определить значки в Qt Designer, как уже показано в вопросе. Для тех, кто разрабатывается под Linux, системные значки будут отображаться прямо в Designer (предположим, что набор иконок использует стандартные имена значков). Это внешний вид (иконки будут настраиваться в ваших системных настройках). Это освобождает вас от кодирования ui->action_Open->setIcon(...).

И окончательная настройка - установить тему перед настройкой ui.

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent)
{
#ifdef _WIN32
  QIcon::setThemeName("tango");
#endif

  ui = new Ui::MainWindow;
  ui->setupUi(this);

  ...
  // NO NEED FOR ui->action_Open->setIcon(...)
}

Конечно, #ifdef можно настроить так, чтобы он нацеливался на все необходимые платформы или не использовался для включения одинаковых значков на всех платформах, включая Linux.

В результате этот подход позволяет избежать всего трудоемкого кодирования, и результат согласуется с системными значками, по крайней мере, на Linux.