gpt4 book ai didi

c++ - QScrollArea 内的 QSpinBox : How to prevent Spin Box from stealing focus when scrolling?

转载 作者:IT老高 更新时间:2023-10-28 21:45:29 26 4
gpt4 key购买 nike

我在 QScrollArea 中有一个带有多个 QSpinBox 对象的控件。在滚动区域中滚动时一切正常,除非鼠标恰好位于其中一个 QSpinBoxes 上。然后 QSpinBox 窃取焦点,滚轮事件操纵旋转框值而不是滚动滚动区域。

我不想完全禁用使用鼠标滚轮来操作 QSpinBox,但我只希望在用户显式单击或切换到 QSpinBox 时发生这种情况。有没有办法防止 QSpinBox 从 QScrollArea 窃取焦点?

正如在下面对答案的评论中所说,设置 Qt::StrongFocus 确实会阻止焦点矩形出现在控件上,但它仍然会窃取鼠标滚轮并调整旋转框中的值并阻止 QScrollArea 滚动.与 Qt::ClickFocus 相同。

最佳答案

为了解决这个问题,我们需要关心以下两个:

  1. 旋转框不得通过使用鼠标滚轮获得焦点。这可以通过将焦点策略设置为 Qt::StrongFocus 来完成。
  2. 如果它已经焦点,则旋转框必须只接受滚轮事件。这可以通过在 QSpinBox 子类中重新实现 QWidget::wheelEvent 来完成。

实现此功能的 MySpinBox 类的完整代码:

class MySpinBox : public QSpinBox {

Q_OBJECT

public:

MySpinBox(QWidget *parent = 0) : QSpinBox(parent) {
setFocusPolicy(Qt::StrongFocus);
}

protected:

virtual void wheelEvent(QWheelEvent *event) {
if (!hasFocus()) {
event->ignore();
} else {
QSpinBox::wheelEvent(event);
}
}
};

就是这样。请注意,如果您不想创建新的 QSpinBox 子类,那么您也可以使用事件过滤器来解决此问题。

关于c++ - QScrollArea 内的 QSpinBox : How to prevent Spin Box from stealing focus when scrolling?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821802/

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