У меня есть указатель на сторонний объект QListView
, который просто отображает строки текста. Каков наилучший способ получить эту строку текста?Получение текста из QListView
ответ
Модели, доступной по QListView::model()
, держит деталь. Вы можете сделать что-то вроде этого:
QListView* view ; // The view of interest
QAbstractItemModel* model = view->model() ;
QStringList strings ;
for (int i = 0 ; i < model->rowCount() ; ++i)
{
// Get item at row i, col 0.
strings << model->index(i, 0).data(Qt::DisplayRole).toString() ;
}
Вы также упомянуть, где вы хотели бы получить обновленные строки, когда текст написан - вы можете сделать это путем подключения dataChanged()
сигнала в модели вашей функции, которая извлекает строку. См. QAbstractItemModel::dataChanged()
.
Вы можете спросить объект QListView для его корневого QModelIndex и использовать его для итерации по различным записям с использованием методов sibling/children. Вы можете получить доступ к тексту, связанному с каждым индексом, вызвав метод данных по индексу с ролью, указанной как Qt :: DisplayRole.
Для получения более подробной информации обратитесь к следующей документации:
QAbstractItemView - родительский класс QListView
и http://doc.trolltech.com/4.5/qvariant.html#toString –
спасибо, плохо попробуйте. Есть ли слот, к которому я могу подключиться, чтобы сделать это, когда на него будет написан новый текст? –
это право? QObject :: connect (model, SIGNAL (dataChanged (QModelIndex, QModelIndex)), client_, SLOT (onText())) где client_ - это класс, полученный из QObject, а onText объявляется в общедоступных слотах. –
Да, это идея. Если ваша подпись onText() также соответствует элементам dataChanged(), вы сможете прокручивать только по индексам, по которым данные изменились, а не по всему списку. – swongu
это моя строка: QObject :: connect (model, SIGNAL (dataChanged (const QModelIndex, const QModelIndex)), client_, SLOT (onText (const QModelIndex, const QModelIndex))); возвращает true, но я не вижу cout, который я вставляю в функцию onText. Есть идеи? –