叠加多个小部件

Overlay multiple widgets

本文关键字:小部 叠加      更新时间:2023-10-16

我有一个包含多个滑块的QWidget。所有滑块的大小都调整为主 QWidget 大小。因此,所有滑块共享相同的绘制矩形。对于滑块,我重载了paintEvent方法,因此它只绘制了所需内容。下面是一个示例代码:

class MySlider : public QSlider
{
    void paintEvent(QPaintEvent *event) {
        ...
    }
}
class MyWidget : public QWidget
{
        MyWidget() : QWidget() {
            slider1 = new MySlider(this);
            slider2 = new MySlider(this);
            slider1->resize(rect().width(), rect().height());
            slider2->resize(rect().width(), rect().height());
        }
        MySlider * slider1;
        MySlider * slider2;
}

ADSF

在这个解决方案中看不到Groove(因为我们不称QSlider::p aintEvent),但它仍然存在。对于此小部件,只能使用上次创建的滑块(slider2)。其余的可见,但不可用。

是否可以将多个小部件

相互叠加,并且仍然能够使用鼠标事件访问所有这些小部件?

重叠的小部件不是一个好主意,预计只有一个同时可见。这种重叠的目的是什么?

您可以将QWidget::setAttribute(Qt::WA_TransparentForMouseEvents)设置为不为该特定小部件生成任何鼠标事件,以便只有一个滑块获取该事件。然后,您可以将该消息重定向到其他滑块。