Стили к собственному виджету - C++ Qt

290
01 февраля 2018, 18:37

Всем привет! Столкнулся с такой трудностью:

Написал свой виджет, переопределил в нем метод paintEvent():

class My_PushButton : public QPushButton
{
//какой то код
};

Хочу к этому виджету применить стили прописанные в файле style.qss

И вот ни в какую не получается. Не применяются стили к виджету, только к собственному, ко всем остальным применяются.

через setObjectName задал имя, и в стилях пробовал по разному прописывать:

#mybutton
My_PushButton#mybutton
QPushButton#mybutton
QPushButton>My_PushButton#mybutton
QPushButton My_PushButton#mybutton

Ни один из вышеприведенных вариантов не сработал. Подскажите как правильно устанавливать селекторы, к собственным виджетам

Answer 1

Вольный перевод официальной документации:

Таблицы стилей 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 }"
READ ALSO
QLabel не заполняется из другого класса

QLabel не заполняется из другого класса

У меня приложение с картой, при нажатии на карту я рисую Waypoint и сохраняю его в мой struct WaypointData

258
Ограничения двумерного vector&#39;а

Ограничения двумерного vector'а

Подскажите, пожалуйста, есть ли у двумерного vector'а ограничение по размеруИ, если да, то какое оно в обе стороны

234
GetAdaptersAddresses и выделение памяти

GetAdaptersAddresses и выделение памяти

Итак имеем функцию GetAdaptersAddresses, которая возвращает список сетевых интерфейсов в системеОписание ф-ции:

302
Явное приведение типов в стиле Си и С++ [дубликат]

Явное приведение типов в стиле Си и С++ [дубликат]

На данный вопрос уже ответили:

264