gpt4 book ai didi

c++ - Qt:将带有 valueChanged(int) 信号的多个输入小部件连接到单个插槽?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:09 25 4
gpt4 key购买 nike

Qt 4.8我以编程方式创建了许多输入小部件( QSpinBoxQSlider )。最后,我希望有一个单一的方法来处理任何这些输入小部件的更改,最好是通过索引。

但是,这些小部件只有一个带参数的信号,例如值已更改(整数)这与 QSignalMapper 不兼容() 的插槽 map()

正如评论中指出的那样,连接确实有效!

    connect(    spinbox,        SIGNAL( valueChanged(int)  ),
signalMapper, SLOT( map() )
);

现在我只需要获取值,但这不能再通过 sender() 方法完成,因为这现在是 SignalMapper。


原问题:

除了使用附加参数或无参数valueChanged() 或使用objectName(重新)实现QSignalMapper 之外,还有其他方法吗> 和 QObject::sender() 以便 Slot 查看更改的元素(并获取新值)?

最佳答案

您可以使用 QAbstractSpinBox::editingFinished()QAbstractSlider::sliderReleased() 作为您的信号,它们是无参数的。

不幸的是,QAbstractSlider::valueChanged() 没有无参数版本,所以如果您希望在 slider 移动时连续发出信号,您可能需要子类化 QSlider 并创建它。例如

class MySlider : public QSlider
{
...
private slots:
void HandleValueChanged(int) { emit valueChanged(); }
signals:
void valueChanged();
};

MySlider::MySlider(...)
{
connect(this, SIGNAL(valueChanged(int)), this, SLOT(HandleValueChanged(int)));
}

虽然我承认,这可能不是最优雅的解决方案。

关于c++ - Qt:将带有 valueChanged(int) 信号的多个输入小部件连接到单个插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531494/

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