2013-11-28 3 views
0

Идея заключалась в том, чтобы подключить QWidget с переменной, чтобы при изменении текста в виджета он также будет изменен в переменной.Map QWidget to variable

И сделать это только с одной линии, как этот

WidgetMapper::connect(ui->lineEdit, SIGNAL(textChanged(QString)), someClass.var); 

, которые соединяют бы, например QLineEdit с переменной.

1) Этот дисплей будет var в lineEdit

2), когда lineEdit стреляет textChanged(QString) сигнал - WidgetMapper бы преобразовать этот QString, чтобы исправить отображенный тип с stringstream и записать его на var.

Но я действительно не знаю шаблонов, которые хорошо, и не знаю, возможно ли вообще. Я не думаю, что можно использовать один WidgetMapper для каждого типа, поэтому я также попытался создать отдельные экземпляры для каждого типа (WidgetMapper<int> mapper;), которые все еще были бы готовы, а затем записывали сеттеры и onTextChangedSlots для каждого QLiteEdit, но я не мог понять, как сделать он также работает (часть преобразователя все еще не может определить правильный тип).

WidgetMapper использует QSignalMapper для отображения сигнала в QWidget, и он работал нормально, часть, с которой я столкнулся, - преобразует QString в переменную шаблона.

Так что это возможно? И если да, как я могу это сделать? Или, может быть, уже есть решение этой проблемы? (Как-то использовать QDataWidgetMapper с классом, который может содержать переменные?)

+0

Почему вы не используете 'QLineEdit :: value()' и конвертируете возвращаемое значение, когда оно вам нужно? –

+0

@RomhaKorev, потому что их много, и изменения должны изменять значения в переменных сразу после его редактирования. Поэтому я хотел бы избежать записи в слот onTextChanged для каждого QLineEdit, чтобы преобразовать его текст() в переменную – Stals

ответ

2

Первое, что связывает переменную, не будет ничего, кроме вызова некоторой функции, если бы это было возможно.

Попытайтесь использовать QSignalMapper, таким образом вы можете использовать один слот для всех виджетов, если вы держите указатели в массиве с индексом, являющимся сигналом (int), испускаемым SignalMapper. Таким образом, ваш слот может использовать только MyWidgetArray[i]->text().

+0

, но как я могу запомнить, какой виджет для какой переменной? – Stals

+0

взгляните на QSignalMapper. Вы можете испускать int-сигналы для разных виджетов. Просто создайте два массива с виджетами и переменными, а затем просто используйте: '' MyVarArray [i] = MyWidgetArray.at [i] -> text(); 'где я всего лишь int, испускаемый QSignalMapper (это мой предпочтительный способ управления множеством париков одного типа в одном слоте) –