Использование стандартных значков 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.