У моего приложения Qt есть большая таблица стилей с множеством полей, пикселей и других элементов, непосредственно основанных на графике и связанных с ними. Я был бы рад передать все это дизайнеру, но таблица стилей хранится в файле .ui, что неудобно для дизайнера; она предпочла бы видеть отдельный файл и редактировать его, используя ее обычные инструменты.
Я хочу переместить таблицу стилей во внешний файл .qss, добавить этот файл к ресурсам программы и связать его с файлом .ui, чтобы таблица стилей автоматически компилировалась и использовалась виджетом, а приложение не получало сохранить файл таблицы стилей и загрузить его во время выполнения.
Как этого добиться?
Скопируйте все ваши стили в файл и переименуйте его в нечто вроде stylesheet.qss
Затем включите его в свой qrc
файл как новый элемент ресурса. Вы можете просто сделать это, отредактировав свой qrc
файл, если у вас уже есть. См. Документацию о том, как добавить новый ресурс.
Затем измените ваш код следующим образом, чтобы прочитать содержимое qss
файл во время выполнения и применить стили к вашему приложению.
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile file(":/stylesheet.qss");
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
a.setStyleSheet(file.readAll());
file.close();
}
MainWindow w;
w.show();
return a.exec();
}
Примечание: когда вы делаете изменения в stylesheet.qss
, вы должны скомпилировать qrc
файл для вступления изменений в силу.
Я устанавливаю таблицу стилей, когда приложение запускается из внешнего файла. Также для дизайнера мы добавили кнопку «перезагрузить таблицу стилей». Таким образом, дизайнер может изменить файл и сразу же попробовать внести изменения.
Например:
QFile styleFile("stylesheet.qss");
styleFile.open(QFile::ReadOnly);
QByteArray bytes = styleFile.readAll();
QApplication *app = (QApplication*)QApplication::instance();
app->setStyleSheet(newStyleSheet);