Qt пример по работе с modbus

181
17 февраля 2018, 22:54

Добрый день!

Разбираюсь в примере QT по работе с modbus, не могу понять вот эту строчку:

auto valueChanged = static_cast<void (QSpinBox::*)(int)> (&QSpinBox::valueChanged);

Идет приведение типов и обращение к члену класса, но какому именно? и что означает знак > ?

Answer 1

У класса QSpinBox есть два сигнала с одинаковым именем, но разной сигнатурой:

void    valueChanged(int i)
void    valueChanged(const QString &text)

По-этому при записи, компилятор просто не поймет, указатель на какую из перегруженных функции нужно использовать:

auto valueChanged = &QSpinBox::valueChanged;

Для того чтоб "подсказать" компилятору и используется это монструозное приведение типа функции

 static_cast<void (QSpinBox::*)(int)> (указатель на функцию);

В Qt есть возможность использовать более короткую конструкцию для этого:

auto valueChanged = QOverload<int>::of(&QSpinBox::valueChanged);

Символ > является частью указания типа у static_cast

static_cast<тип_функции>(указатель_на_функцию);
READ ALSO
Почему не работают слоты в загруженной форме через QUiLoader?

Почему не работают слоты в загруженной форме через QUiLoader?

Не хотят работать слоты в загруженой форме через QUiLoaderВот конструктор базового класса:

227
return функции-вектора

return функции-вектора

Есть функция, которая в вектор помещает числа типа intНеобходимо, чтобы в главной части программы, задав вектор, эта функция заполняла бы его...

210
Проблема с односвязным списком

Проблема с односвязным списком

Вобщем, есть вопросикДелаю односвязный список

270
Как boost::filesystem::directory_entry::path() добавить в const char **

Как boost::filesystem::directory_entry::path() добавить в const char **

Доброе время сутокЕсть класс, у него есть член

243