当前位置: 首页 > 知识库问答 >
问题:

重写mousePressEvent和mouseReleaseEvent时,单击不起作用

龙华翰
2023-03-14

所以我想给我的按钮添加一些样式。因此,我创建了一个从QPushButton派生的类。我已经重写了mousePressEvent和mouseReleaseEvent函数。到目前为止还好。一切都按预期工作,按钮在按下和释放时会改变颜色。当我在MainWindow中尝试实现on_button_clicked()时,问题就出现了。就是行不通。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

void MainWindow::on_characters_clicked()
{
    qDebug("Hello");
}

void Button::mousePressEvent(QMouseEvent* event)
{
    setStyleSheet(defaultStyle + "Background-color: gray;");
}

void Button::mouseReleaseEvent(QMouseEvent* event) {
    setStyleSheet(defaultStyle + "Background-color: darkgray; border: 1px solid gray; color: white;");
}

共有1个答案

姜奇
2023-03-14

当重写方法时,您正在修改类的行为,在这种情况下,单击的信号是在mouseReleaseEvent中发出的,但是只有当mousePressEvent接受事件时才调用mouseReleaseEvent,但是在修改代码时,您已经消除了该事件。解决方案是调用父级的实现。

void Button::mousePressEvent(QMouseEvent* event)
{
    setStyleSheet(defaultStyle + "Background-color: gray;");
    QPushButton::mousePressEvent(event);
}

void Button::mouseReleaseEvent(QMouseEvent* event) {
    setStyleSheet(defaultStyle + "Background-color: darkgray; border: 1px solid gray; color: white;");
    QPushButton::mouseReleaseEvent(event);
}

另一方面,我认为没有必要重写mousePressEvent方法,因为Qt样式表支持伪状态:

setStyleSheet(R"(
    Button{
      // default styles
      background-color: darkgray; 
      border: 1px solid gray; 
      color: white;
    }
    Button::presed{
      // default styles
      background-color: gray;
    }
)");
 类似资料:
  • 问题内容: 我在我的角度web应用程序。 当我在浏览器中键入内容时,它会重定向到我期望的位置,但是当我单击时,它不会重定向,而是停留在url上。 我的控制台没有错误,我也不知道为什么。 当不再工作时 我在这里看到了一个类似的问题AngularUI-Router$urlRouterProvider。我尝试了答案,但它仍然对我不起作用。 这是我的coffeescript代码: 问题答案: 先前的解决方

  • 问题内容: 我已经设置了版本4 的React。当我直接在浏览器中输入URL时,路由有效,但是当我单击链接时,URL在浏览器上发生了变化(例如http:// localhost:8080 / categories ),但是内容不会更新(但是如果我刷新,它会更新)。 以下是我的设置: 该 Routes.js 设置如下: 我在 Nav.js 中使用的链接如下: 该 App.js 如下: 问题答案: 包装

  • 我有一个注释项目,在我的.user__comments__container div中有一个按钮id#see_more_comments,当注释超过4时,该按钮通过jquery post从getcomments-afunc.php文件输出。ajax.php的文件代码是: 现在,当它通过jquery post调用输出到我的index.php时,它就被注册了,可以在我的浏览器或DOM的elements

  • 我对symfony框架知之甚少。我复制了一个网站www.example。net访问www.example。com站点使用url 它不会重定向。 谢谢

  • 我已经可以切换到iframe,然后点击图像选择[如图1所示]然后不能点击div-预览按钮[如图2-蓝色按钮]这是“应用和关闭”。 知道吗?