Идея заключалась в том, чтобы связать QWidget с переменной, чтобы при изменении текста в виджете он также изменялся в переменной.
И сделать это только с одной строкой, как это
WidgetMapper::connect(ui->lineEdit, SIGNAL(textChanged(QString)), someClass.var);
который соединит, например, QLineEdit
с переменной.
1) Это будет отображать var
в строке
2) когда lineEdit запускает textChanged(QString)
signal — WidgetMapper преобразует этот QString в правильный отображенный тип с помощью stringstream и запишет его в var
,
Но я не очень хорошо знаю шаблоны и не знаю, возможно ли это вообще.
Я не думаю, что можно использовать один WidgetMapper для каждого типа, поэтому я также попытался создать отдельные экземпляры для каждого типа (WidgetMapper<int> mapper;
), который все же лучше было бы тогда писать сеттеры и onTextChangedSlots для каждого QLiteEdit, но я не мог понять, как заставить это работать также (часть конвертера все еще не могла определить правильный тип).
WidgetMapper использует QSignalMapper для отображения сигнала в QWidget, и он работал нормально, часть, с которой у меня проблемы — преобразование QString в переменную шаблона.
Так возможно ли это? И если да, то как я могу это сделать? Или, может быть, уже есть решение этой проблемы? (Как-то использовать QDataWidgetMapper
с классом, который может содержать переменные?)
Во-первых, подключение переменной не сделало бы ничего, кроме вызова некоторой функции, если бы это было возможно.
Вторая попытка с помощью QSignalMapper
Таким образом, вы можете использовать один слот для всех виджетов, учитывая, что их указатели хранятся в массиве, а индексом является сигнал (int), испускаемый SignalMapper. Таким образом, ваш слот может просто использовать MyWidgetArray[i]->text()
,
Других решений пока нет …