首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将水平滑块连接到液晶屏编号和Qt中的进度条时出现问题

尝试将水平滑块连接到液晶屏编号和Qt中的进度条时出现问题
EN

Stack Overflow用户
提问于 2021-02-01 04:29:35
回答 1查看 92关注 0票数 0

我想要移动滑块和变化值,以显示在液晶屏上的数字和Qt中的进度条。我在mainWindow构造函数中使用连接函数,如下所示

代码语言:javascript
复制
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->progressBar,&QProgressBar::setValue);
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->lcdNumber, &QLCDNumber::display);

但是第二个函数返回

代码语言:javascript
复制
error: no matching function for call to 'MainWindow::connect(QSlider*&, void (QAbstractSlider::*)(int), QLCDNumber*&, <unresolved overloaded function type>)'

为什么会发生这种情况?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 07:31:11

由于参数类型不匹配而发生错误。QSlider::valueChanged(int)有int参数,QProgressBar::setValue(int)也有int参数。所以他们之间没有问题。另一方面,QLCD::display重载了3种不同的类型:doubleintQString。要连接过载的信号/插槽,可以使用QOverload

代码语言:javascript
复制
connect(ui->horizontalSlider, &QSlider::valueChanged, ui->lcdNumber, QOverload<int>::of(&QLCDNumber::display));

另一种选择是使用lambda。我们可以将这两个连接放入一个lambda连接中:

代码语言:javascript
复制
connect(ui->horizontalSlider, &QSlider::valueChanged, [&](int value) {
    ui->progressBar->setValue(value);
    ui->lcdNumber->display(value);
});

旧的SIGNAL()/SLOT()语法也可以解决这个问题。但我建议不要使用它们,因为它们容易出错,而且很“旧”。

另外,请查看qOverload,它是C++14的QOverload包装器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65983928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档