Злой Дядька в сети — 6 апреля 2017

Связка QComboBox и QTreeView

6 апреля 2017 (13:32:59)

В одном из выпадающих списков (QComboBox) мне потребовалось отобразить некую древовидную структуру элементов. По сути, всё сводится к установке QTreeView в качестве выпадающего списка для QComboBox. Задача тривиальная: создаём модель (я взял стандартную QStandardItemModel), создаём вид (QTreeView), связываем модель с видом и устанавливаем их в качестве модели и вида для нужного экземпляра QComboBox. Тут ничего сложного нет.

Проблемы начались, когда мне потребовалось программно установить текущий элемент в QComboBox. Решение нашлось, хотя и не сразу и не совсем прямое:

/* Определяем индекс в модели, который нужно сделать текущим */
QModelIndex index = findIndex();

/* Устанавливаем текущий элемент у view */
view->setCurrentIndex( index );

/* Устанавливаем текущий элемент в QComboBox */
myComboBox->setRootModelIndex( index.parent() );
myComboBox->setCurrentIndex( index.row() );
myComboBox->setRootModelIndex( QModelIndex() );

Отзовик - пишите отзывы и получайте деньги!