【问题标题】:QT custom widget hoverQT 自定义小部件悬停
【发布时间】:2021-02-27 22:02:06
【问题描述】:

我制作了带有两个标签的自定义小部件。第一个用于显示所选颜色,第二个仅用于显示文本。我想做悬停效果。我尝试了不同的方法,但所有方法都以相同的结果结束。悬停有效,但仅适用于这两个单独的块(如下图所示:)

我想将整个块突出显示为一个(红色矩形区域如下所示):

我尝试在自定义小部件构造函数中实现这一点:

this->setStyleSheet(":hover{ background-color: rgba(0,20,100,0.5); }");

我还尝试将 QFrame 对象添加到我的 ui 并用我的自定义小部件替换它。两种方法都不起作用。我找到了那个话题: Set a StyleSheet for a whole widget in Qt

有人设法做到了:

最后我解决了在主 QWidget 中创建 QFrame 并设置该 QFrame 的 StyleSheet 的问题。

我尝试了这种方法,但我不确定我是否正确应用了它(可能不是,因为它仍然不起作用)。有人可以帮我吗?

【问题讨论】:

标签: c++ qt custom-widgets


【解决方案1】:

我有同样的问题,我想你的解决方案是最简单的。 顺便说一句,正确的决定是为您的自定义小部件覆盖 EventFilter() 方法。 像这样:

bool CustomWidget::eventFilter(QObject *obj, QEvent *event)
{
    if (obj ==  ui->pushButton) {
          QEvent::Type type = event->type();
          if  (type == QEvent::HoverLeave) {
 
             qDebug()<<"No";
 
          } else if (type == QEvent::HoverEnter) {
 
             qDebug()<<"YES";
 
          }else if (type == QEvent::MouseButtonPress) {
            qDebug()<<"enter";
          }
      }
 
      return QWidget::eventFilter(obj, event);
}

【讨论】: