2015-01-12 2 views
2

У меня есть форма с тремя полями, и я пытаюсь заполнить эти поля со значениями из model.Below является код в моем файле заголовка, и файл .cpp:как использовать QDataWidgetMapper с QLineEdit

декларации в myForm.h

private: 
    Ui::MyForm *ui; 
    QStringListModel *model; 
    QDataWidgetMapper *mapper; 

Код в myForm.cpp

model=new QStringListModel(this); 

QStringList list; 
list << "abc"<<"def"<<"ghi"; 
model->setStringList(list); 
mapper=new QDataWidgetMapper(); 
mapper->setModel(model); 
mapper->addMapping(ui->lineEdit_13,0); 
mapper->toFirst(); 

Когда я запускаю приложение, к которому текстовое поле заполняется с первым значением, которое является «абв». Я не уверен, как я могу использовать QDataWidgetMapper для заполнения двух других значений «def» и «ghi» в двух других текстовых полях формы. Я просмотрел различные параметры, доступные для QDataWidgetMapper, и не знал, как заполнять данные. Он всегда заполняет только одно значение, а два других поля пустые. Как все три значения могут быть прочитаны из модели или я делаю что-то неправильно здесь? Я только начал использовать модели в своем приложении Qt.

+0

QDataWidgetMapper отображает либо одну строку или один столбец виджетов. Модель списка содержит каждый элемент в виде строки в одном столбце. Что именно вы хотите сделать? Что вы хотите, чтобы виджеты отображались после 'mapper-> toNext()'? – Leiaz

+0

@Leiaz У меня есть список из трех значений, и этот список прикреплен к модели, как показано выше. Я хочу, чтобы все три значения отображались в трех текстовых полях. Как я хочу, чтобы первое текстовое поле отображало «abc» следующее поле для отображения «def» и последнего «ghi». Как я могу получить эту функциональность? – Valla

ответ

2

Ваша модель имеет один столбец и три ряда. Если вы хотите рассматривать столбец как один «элемент», вы должны указать ориентацию на QDataWidgetMapper с QDataWidgetMapper::setOrientation(Qt::Orientation). По умолчанию Qt::Horizontal (один «элемент» - это одна строка модели), вы хотите установить его на Qt::Vertical.

Затем вы используете addMapping, как вы делали, каждая строка представляет собой раздел:

mapper->addMapping(ui->lineEdit_abc,0); 
mapper->addMapping(ui->lineEdit_def,1); 
mapper->addMapping(ui->lineEdit_ghi,2); 
Смежные вопросы