Comments 12
Хорошая статья, но… хотелось бы увидеть код showPopup()
и hidePopup()
, а также скриншот того, что получилось. Не понятно также как будут работать методы
int currentIndex() const
и
void setCurrentIndex(int index)
QCombobox
-a, как они будут связаны с QModelIndex
представления и модели?
Не понятно также как будут работать методы
int currentIndex() const и void setCurrentIndex(int index)
Они работают, но главная проблема в том, что QComboBox возвращает индекс строки относительно «корня», он не понимает древовидную модель, поэтому над setCurrentIndex, лучше сделать обёртку, которая будет заниматься установкой нужного индекса.
void TreeComboBox::selectIndex(const QModelIndex &index)
{
setRootModelIndex(index.parent());
setCurrentIndex(index.row());
m_view->setCurrentIndex( index );
}
Получение данных из модели делается стандартными средствами модели, примерно так:
auto id = model->data(model->index(combobox->currentIndex(), 0 , combobox->view()->currentIndex().parent()), Qt::DisplayRole).toInt();
Спасибо, отлично получилось. Вы меня вдохновили, чтобы тоже что-нибудь про Qt написать из своего опыта :)
Обычно я использовал QStandardItemModel, но понадобилась очень сложная и развесистая модель — написал свою. Стандартная Qt-шная — довольно медленная, и навязывает свою архитектуру, что может оказаться очень неудобным в определённых моментах, информации по ним тоже кот наплакал, если табличные модели расписаны в документации «от и до», то древовидные почти не раскрыты.
Но там материала думаю на несколько статей хватит
Древовидные достаточно сложно унифицировать. Поэтому про них и мало написано. Тем более, что некоторые варианты использования сложно визуализировать, например, когда есть дети у ненулевого столбца и т.п.
Главное — это понять что Qt-шная модель, это не модель данных в общепринятом значении, а, скорее часть логики представления. Лучше даже сказать — адаптер.
Поэтому про них и мало написано.
Вот в этой книге довольно подробно и много.
Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на С++
www.ozon.ru/context/detail/id/6364884

Разве что эту стрелочку с текста комбобокса придётся стирать, если мешает.
Да, знаю что такое принято писать в ЛС, но пишу специально сюда, дабы люди научились перечитывать свои статьи на поиск и исправление ошибок. Статье всё-таки больше недели отроду…
Хитрости QComboBox + QTreeView