У класса QComboBox
есть сигнал, и 2 перегрузки:
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
При попытке соединить это дело со слотом класса:
public slots:
...
void audioInputSelected(int index);
Получаю ошибку
ошибка: no matching function for call to 'MainWindow::connect(QComboBox*&, <unresolved overloaded function type>, MainWindow*, void (MainWindow::*)(int))'
connect(ui->inputDevices, &QComboBox::currentIndexChanged, this, &MainWindow::audioInputSelected);
^
Соединяю так:
connect(ui->inputDevices, &QComboBox::currentIndexChanged, this, &MainWindow::audioInputSelected);
Почему так происходит и как это поправить?
При этом, если использовать старый вариант соединения сигналов и слотов из Qt4
connect(ui->inputDevices, SIGNAL(currentIndexChanged(int)), this, SLOT(audioInputSelected(int)));
то все успешно работает.
Новый синтаксис соединения не умеет (сам) в перегруженные сигналы/слоты. Для того, чтобы соединиться в такой ситуации, надо воспользоваться явным приведением типа (из wiki qt - https://wiki.qt.io/New_Signal_Slot_Syntax#Overload):
connect(mySpinBox, SIGNAL(valueChanged(int)), mySlider, SLOT(setValue(int));
cannot be simply converted to:
connect(
mySpinBox, &QSpinBox::valueChanged,
mySlider, &QSlider::setValue
)`
...because QSpinBox has two signals named valueChanged() with different arguments. Instead, the new code needs to be:
connect(
mySpinBox, static_cast<void (QSpinBox::*)(int)>
(&QSpinBox::valueChanged),
mySlider, &QSlider::setValue
);
Или же воспользоваться qOverload
, сокращающим этот код -
connect(mySpinBox, qOverload<int>(&QSpinBox::valueChanged),
mySlider, &QSlider::setValue);
http://doc.qt.io/qt-5/qtglobal.html#qOverload
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Осваиваю gprofУ меня есть многопоточное приложение, которое необходимо оптимизировать
Для сетевой части используется boost asioНа Windows(MSVC) выскакивает exception: "