gpt4 book ai didi

c++ - 不同的默认按钮设计行为

转载 作者:行者123 更新时间:2023-11-28 06:24:45 25 4
gpt4 key购买 nike

问题如下:我想重新定义(摆脱按钮的悬停效果)默认的 Qt 按钮样式的行为。我只需要 1 和 3,如下图所示。第二次看是在按钮获得焦点时。

悬停效果:悬停按钮时出现;当您按下按钮并将光标移到按钮空间之外时,仍会绘制。

normal, hover, armed

我尝试过的:

  1. 重新定义事件:

    How do I implement QHoverEvent in Qt?

    这里我简单地重新定义了一些事件,如移动、悬停等,并使它们不起作用。

    示例代码:

    class TestButton : public QToolButton
    {
    Q_OBJECT

    public:
    TestButton (QWidget *parent = 0) :
    QToolButton(parent)
    {}

    bool event(QEvent * e)
    {
    this->clearFocus();
    this->clearMask();

    switch (e->type())
    {
    case QEvent::GraphicsSceneHoverEnter:
    case QEvent::GraphicsSceneHoverLeave:
    case QEvent::GraphicsSceneHoverMove:
    case QEvent::HoverEnter:
    case QEvent::HoverLeave:
    case QEvent::HoverMove:
    return true;
    default:
    return QWidget::event(e);
    }
    }
    };
  2. 一些小技巧:

    btn->setFocusPolicy(Qt::NoFocus);

最佳答案

如果您只接受 HoverEnter 事件,那么在释放按钮后,一旦您将鼠标移开,悬停效果就会消失。所以你需要通过发送相应的事件来假装移动鼠标。

bool event(QEvent * e)
{
switch (e->type()) {
case QEvent::HoverEnter:
return true;
case QEvent::MouseButtonRelease: {
QEvent event(QEvent::Leave);
QApplication::sendEvent(this, &event);
}
default:
return QWidget::event(e);
}
}

关于c++ - 不同的默认按钮设计行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com