Как установить фон для всплывающей подсказки QPushButton? - PullRequest
0 голосов
/ 08 апреля 2019

В 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;
}

Размер шрифта и граница работают, но фоновое изображение всплывающей подсказки такое же, как у кнопки. Я также попытался добавить еще одно фоновое изображение в подсказку, оно тоже не сработало.

Как изменить фон всплывающей подсказки?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы должны указать QWidget, где применить свойство. Если вы этого не сделаете, он будет применен ко всем дочерним элементам виджета.

В вашем случае, чтобы избежать фонового изображения во всплывающей подсказке, вы должны указать, что хотите применить этот стиль к виджету QPushButton. В документации написано:

Если мы хотим, чтобы свойство применялось только к QLineEdits, которые являются дочерними (или внуками или правнуками) определенного диалога, мы бы предпочли сделать это:

myDialog-> setStyleSheet ("QLineEdit {background-color: yellow}");

В примере, который вы упоминаете, если вы хотите изменить стиль всплывающей подсказки и кнопки, сделайте что-то вроде этого:

ui->pushButton->setStyleSheet(""
    "QPushButton { background-image: url(me.png); }"
    "QToolTip { color: #ffffff; background-color: #000000; border: 0px; }");

Это даст вам что-то вроде этого

enter image description here

Обновление:

Если вы хотите применить его к одному объекту, а не к остальным виджетам того же типа, документация гласит:

Если мы хотим, чтобы свойство применялось только к одному конкретному QLineEdit, мы можем присвоить ему имя с помощью QObject :: setObjectName () и использовать селектор идентификаторов для ссылки на него:

myDialog-> setStyleSheet ("QLineEdit # nameEdit {background-color: yellow}");

Так в вашем случае:

ui->pushButton->setObjectName("awesomeButton");
ui->pushButton->setStyleSheet("QPushButton#awesomeButton { background-image: url(me.png); }");
0 голосов
/ 08 апреля 2019

Когда вы устанавливаете qss с помощью setStyleSheet, ваша таблица стилей применяется ко всем дочерним объектам объекта. В вашем случае вы можете избежать этого, используя таблицу стилей только для QPushButton

button->setStyleSheet("QPushButton {background-image: url(pathToImage);}");
...