gpt4 book ai didi

qt - 带有信号参数和额外参数的 QSignalMapper

转载 作者:行者123 更新时间:2023-12-04 04:57:34 28 4
gpt4 key购买 nike

我知道 QSignalMapper 在这种情况下工作得很好:

QSignalMapper *signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(SetSlice(int)));

connect(this->ui->button_1, SIGNAL(slicked()), signalMapper, SLOT(map()));
connect(this->ui->button_2, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(this->ui->button_3, SIGNAL(clicked()), signalMapper, SLOT(map()));

现在我想实现 3 个 slider ,它们都有一个类似 SLOT 的按钮:
QSignalMapper *signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(SetSlice(int)));

connect(this->ui->verticalSlider_1, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
connect(this->ui->verticalSlider_2, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
connect(this->ui->verticalSlider_3, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));

正如你所看到的,这与 SIGNAL 和 SLOT 之间的一致规则是矛盾的。
这里有解决方法吗?我正在使用 Qt4。

最佳答案

QSignalMapper不是关于从信号向槽发送参数,而是让信号接收者知道“谁”是那个或使用了什么数据。如果你需要知道 value 和 sender,你可以使用一些内部类映射,或者使用 QObject *映射器然后转换QObject *到 slider 。

QSignalMapper * mapper = new QSignalMapper(this);
connect(mapper, SIGNAL(map(QWidget *)), this, SLOT(SetSlice(QWidget *)));

mapper->setMapping(this->ui->verticalSlider_1, this->ui->verticalSlider_1);
mapper->setMapping(this->ui->verticalSlider_2, this->ui->verticalSlider_2);
mapper->setMapping(this->ui->verticalSlider_3, this->ui->verticalSlider_3);

这是插槽主体:
void YourClass::SetSlice(QWidget *wgt)
{
QSlider * slider = qobject_cast<QSlider *>(wgt);

if(slider) {
SetSlice(slider->value());
}
}

关于qt - 带有信号参数和额外参数的 QSignalMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578466/

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