1

我在 Qt Designer 中设计了两种不同的 QPushButton。一个是默认的,另一个我想清楚。在 QT Designer 中,我设置了后者的初始样式表,如下所示:

background-color: rgba( 35, 35, 35, 0% );

我希望按钮有一个边框并且清晰(内部颜色并不是很重要;这恰好与配色方案相匹配)。当我将鼠标悬停在按钮上时,我希望它保持清除,但是它变成了 35/35/35 的纯灰色。

当按钮收到信号按下时,我希望它变成半透明的绿色:

    background-color: rgba( 0, 255, 0, 50% );

在我意识到鼠标悬停会成为问题之前,我已经编写了以下代码:

QString MyPanel::FillInvisibleButton(bool activeButton)
{
  QString invisibleButton;

  if (activeButton) {
     invisibleButton = "QPushButton{background-color: rgba(0, 255, 0, 50%);}";
  } else {
     invisibleButton = "QPushButton{background-color: rgba(35, 35, 35, 0%);}";
  }
  return invisibleButton;
}


//Signals
void MyPanel::MyButtonPressed()
{
   m_ui->myButton->setStyleSheet(FillInvisibleButton(true));
}

void MyPanel::MyButtonReleased()
{
   m_ui->myButton->setStyleSheet(FillInvisibleButton(false));
}

就在按下清除按钮时使清除按钮变为透明绿色而言,这非常有效......但是当它被鼠标悬停时,它上面有一个灰色的不透明大块,我想离开!

我试过这个:

    QString MyPanel::FillInvisibleButton(bool activeButton)
{
  QString invisibleButton;

  if (activeButton) {
     invisibleButton = "QPushButton{background-color: rgba(0, 255, 0, 50%);} QPushButton:hover{background-color: rgba(35, 35, 35, 0%);}";
  } else {
     invisibleButton = "QPushButton{background-color: rgba(35, 35, 35, 0%);} QPushButton:hover{background-color: rgba(35, 35, 35, 0%);}";
  }
  return invisibleButton;
}

它根本不起作用。他们仍然将鼠标悬停在灰色上,现在他们根本不会变成绿色。

我的语法错了吗?或者??我是 Qt 新手,对 C++ 非常生疏。我没有嫁给样式表。如果有更好的方法来完成它,那就太好了。请记住,我不能对所有按钮都这样做;只是其中几个。

谢谢!

ETA:我相信我正在使用 4.5.0

4

2 回答 2

3

您不需要使用信号,样式表就足够了。试试这个:

QPushButton {
    background-color: rgba( 35, 35, 35, 0% );
    border: 1px solid black;
}

QPushButton:pressed {
    background-color: rgba( 0, 255, 0, 50% );
}
于 2013-01-25T07:47:20.933 回答
0

在您的样式表中,您可以使用“悬停”伪状态:

button->setStyleSheet("QPushButton:hover { ... }");
于 2013-01-25T07:08:27.083 回答