В Qt я установил фоновое изображение для QPushButton, затем добавил всплывающую подсказку для этой кнопки, и всплывающая подсказка имеет то же фоновое изображение, что и кнопка, и я не мог изменить его с помощью таблицы стилей, что мне не хватает?
В моем коде у меня есть:
button->setStyleSheet("background-image: url(pathToImage);");
button->setToolTip("Click here");
В моем style.qss у меня есть:
QToolTip{
background-image: none;
background-color: white;
font-size: 20px;
border: 1px solid black;
}
Размер шрифта и граница работают, но фоновое изображение всплывающей подсказки такое же, как и у кнопки. Я также попытался добавить еще одно фоновое изображение во всплывающую подсказку, это тоже не сработало.
Как изменить фон всплывающей подсказки?
Когда вы устанавливаете qss с помощью setStyleSheet
, ваша таблица стилей применяется ко всем дочерним элементам объекта. В вашем случае вы можете избежать этого, используя таблицу стилей только для QPushButton
button->setStyleSheet("QPushButton {background-image: url(pathToImage);}");
Вы должны указать QWidget
, где применить свойство. Если вы этого не сделаете, он применит его ко всем дочерним элементам виджета.
В вашем случае, чтобы избежать фонового изображения во всплывающей подсказке, вы должны указать, что хотите применить этот стиль к виджету QPushButton. В документации говорится:
If we want the property to apply only to the QLineEdits that are children (or grandchildren or grand-grandchildren) of a specific dialog, we would rather do this:
myDialog->setStyleSheet("QLineEdit { background-color: yellow }");
В приведенном вами примере, если вы хотите изменить стиль всплывающей подсказки и кнопки, сделайте что-то вроде этого:
ui->pushButton->setStyleSheet(""
"QPushButton { background-image: url(me.png); }"
"QToolTip { color: #ffffff; background-color: #000000; border: 0px; }");
Это даст вам что-то вроде этого
Если вы хотите применить его к одному объекту, а не к остальным виджетам того же типа, в документации сказано:
If we want the property to apply only to one specific QLineEdit, we can give it a name using QObject::setObjectName() and use an ID Selector to refer to it:
myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
Итак, в вашем случае:
ui->pushButton->setObjectName("awesomeButton");
ui->pushButton->setStyleSheet("QPushButton#awesomeButton { background-image: url(me.png); }");
Теперь, чтобы быть более конкретным: у меня есть кнопки QVector<QVector<QPushButton*> >; Как я могу применить таблицу стилей для этих QPushButtons, а не для других?