29 окт. 2008 г.

Qt4: Style Sheets

Если уж в Qt есть QScript, основанный на ECMAScript, то почему бы не быть другой web-технологии на службе Qt - Style Sheets.

Рассмотрим на примере стилизации QProgressDialog'а:
main.qss:
QProgressBar:horizontal {
border: 1px solid gray;
border-radius: 3px;
background: white;
padding: 1px;
}
QProgressBar::chunk:horizontal {
background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0 white, stop: 0.5 blue, stop: 1 white);
}

Updated:
При этом можно данный стиль выставить как непосредственно для экземпляра компонента:
пример кода:
progressDialog = new QProgressDialog();
progressDialog->setStyleSheet(QString::fromUtf8("QProgressBar:horizontal {"
"border: 1px solid gray;"
"border-radius: 3px;"
"background: white;"
"padding: 1px;"
"}\n"
"QProgressBar::chunk:horizontal {\n"
"background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0 white, stop: 0.5 blue, stop: 1 white);\n"
"}"));

// Индикатор не имеет определённых конечных значений, т.н. busy indicator
progressDialog->setMinimum(0);
progressDialog->setMaximum(0);

progressDialog->show();
Так и можно установить его QApplication (qApp), загрузив стиль из файла, и соответствующие компоненты будут использовать необходимые им css-классы:
QFile file("main.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
// qApp - глобальный указатель на экземпляр QApplication
qApp->setStyleSheet(styleSheet);
file.close();



Стилизованный QProgressDialog


Reference: Qt-Labs: Styling QProgressBar and QScrollBar

Комментариев нет: