Всем привет! Столкнулся с такой трудностью:
Написал свой виджет, переопределил в нем метод paintEvent():
class My_PushButton : public QPushButton
{
//какой то код
};
Хочу к этому виджету применить стили прописанные в файле style.qss
И вот ни в какую не получается. Не применяются стили к виджету, только к собственному, ко всем остальным применяются.
через setObjectName задал имя, и в стилях пробовал по разному прописывать:
#mybutton
My_PushButton#mybutton
QPushButton#mybutton
QPushButton>My_PushButton#mybutton
QPushButton My_PushButton#mybutton
Ни один из вышеприведенных вариантов не сработал. Подскажите как правильно устанавливать селекторы, к собственным виджетам
Вольный перевод официальной документации:
Таблицы стилей Qt Style Sheets используют метод QObject::className()
для определения типа селектора. Для виджета внутри пространства имён этот
метод возвращает значение <namespace>::<classname>, которое
конфликтует с принятым синтаксисом Sub-Controls. Для решения этой
проблемы необходимо заменить :: на --.
Пример:
namespace ns
{
class MyButton : public QPushButton
{
Q_OBJECT
public:
explicit MyButton(QWidget* parent = nullptr) :
QPushButton(parent)
{
qDebug() << tr("constructor ns::MyButton() done.");
}
};
const QString mybuttonStyle()
{
return QString("ns--MyButton { background-color: yellow; color: red }");
}
}
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
ns::MyButton b;
QObject::connect(&b, &ns::MyButton::clicked,
&a, &QApplication::quit);
b.setText(a.tr("MyButton"));
b.setStyleSheet(ns::mybuttonStyle());
b.show();
return a.exec();
}
Строка стиля для того же элемента, определённого без использования пространства имён, будет выглядеть так:
"MyButton { background-color: yellow; color: red }"
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости