Qt: c++: как заполнить QComboBox с помощью QStringList

Я пытаюсь добавить элементы в QComboBox с помощью функции insertItems следующим образом:

QStringList sequence_len = (QStringList()
<< QApplication::translate("MainWindow", "1", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("MainWindow", "2", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("MainWindow", "3", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("MainWindow", "4", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("MainWindow", "5", 0, QApplication::UnicodeUTF8)
);

ui->QComboBox->insertItem(0, &sequence_len);

но не работает, выдавая мне следующее сообщение об ошибке:

error: no matching function for call to 'QComboBox::insertItem(int, QStringList*)'

На самом деле, когда я пишу ui->QComboBox->insertItem( в своем классе, чтобы увидеть предложения Qt-Creator, вариант: (int index, const QStringList & list) не существует. Итак, сначала я подумал, что это потому, что мой Qt-Creator не поддерживает эту функцию. Однако, что удивительно, при заполнении QComboBox непосредственно из вкладки «Дизайн» в Qt-Creator после создания виджета QComboBox та же функция используется ui_mainwindow.h.

почему это происходит и есть ли способ добавить эту функцию в мой класс?


person hashDefine    schedule 11.06.2013    source источник


Ответы (3)


Используйте addItems или insertItems функция-член QComboBox. //обратите внимание, что в конце функций, принимающих аргумент QStringList, есть s: это добавление/вставка элементовs

LE: не передавайте адрес вашего QStringList, функция принимает ссылку на объект QStringList, а не на указатель, используйте: ui->QComboBox->insertItems(0, sequence_len); //no & before sequence_len

Полный пример заполнения QComboBox (учитывая, что tr() настроен правильно):

QStringList sequence_len = QStringList() << tr("1") << tr("2") << tr("3") << tr("4") << tr("5");
//add items:
ui->QComboBox->addItems(sequence_len);
//insert items into the position you need
//ui->QComboBox->insertItems(0, sequence_len);
person Zlatomir    schedule 11.06.2013
comment
Спасибо. Удаление указателя и замена insertItem на addItem заставит его работать. - person hashDefine; 11.06.2013
comment
InsertItems тоже должен работать, я торопился прочитать, что заставило меня указать на addItems - и тогда я увидел ошибку, которую вы имеете... LE: снова ошибка - она ​​также имеет insertItem_s_ (это должно работать) - person Zlatomir; 11.06.2013
comment
Вы правильно сказали insertItems в описании проблемы, но в коде вы используете insertItem (без s в конце), см. документацию здесь: qt-project.org/doc/qt-4.8/qcombobox.html#insertItems - person Zlatomir; 11.06.2013
comment
спасибо .. я вообще не заметил пропущенных s. вот почему он не работал. - person hashDefine; 11.06.2013
comment
@Zlatomir Я намеренно отформатировал код без создания дополнительной переменной, чтобы показать, как заполнить QComboBox одной строкой кода. Конечно, окончательное решение о форматировании кода остается за вами. - person rutsky; 24.12.2014
comment
@rutsky спасибо за предложение по редактированию, но я думаю, что будет понятнее отделить элементы добавления QStringList от элементов добавления QComboBox. - person Zlatomir; 24.12.2014

не передавать список жал как указатель

ui->QComboBox->insertItem(0, sequence_len);
person WoJo    schedule 11.06.2013

Попробуй это:

//Text that you want to QStringList
QStringList list;
list << "a" << "b" << "c";

//Instance of model type to QStringList
QStringListModel *model = new QStringListModel();
model->setStringList(list);

ui->QComboBox->setModel(model);

В этом случае QStringList list может быть вашим списком в sequence_len.

person Sergio Cabral    schedule 28.10.2014