Как я неоднократно публиковал несколько месяцев за последние несколько месяцев, я пишу приложение журнала/дневника в Qt. Записи сортируются в QTreeWidget по годам, месяцам, дням и записи (по умолчанию конфигурация сортирует записи по дням) или по годам, месяцам и записи (где все записи из того же месяца сгруппированы вместе)Итерация через узлы QTreeWidget
Запись узлы имеют два столбца: первый вид виден и содержит имя записи. Второй столбец невидим и содержит номер строки соответствующей записи в базе данных. Когда эта запись выбрана, программа выполняет запрос выбора на основе этого номера строки и отображает содержимое. Корень, год, месяц, (и день, если включено) узлы также имеют второй столбец, но номер строки на них всегда равен -1. (действительный счетчик строк начинается с 0)
Панель инструментов журнала уже имеет кнопки назад и вперед, что позволяет пользователю просматривать следующую и предыдущую записи. Хотя эта функция уже работает, текущий выбранный элемент в дереве не изменяется вместе с ним, и это то, что я пытаюсь исправить.
Я решил, что лучший способ сделать это - это функция цикла, которая сканирует значения второго скрытого столбца каждого, пока не будет найден правильный номер строки. Каждый щелчок кнопок назад/вперед вызовет эту функцию снова, чтобы выбранный узел всегда соответствовал текущей записи, просматриваемой, как только я получу эту работу.
Недостатком является то, что этот метод может быть медленным, если база данных становится огромной, но я не могу с этим поделать. Пользователь может удалять записи или перетасовывать их, поэтому просто полагаться на rownumber ++ или rownumber - может вызвать проблемы. Поскольку база данных не заполняет недостающие номера строк, а просто переходит к следующему, могут возникнуть проблемы, если программа всегда предполагает, что каждая строка, когда-либо сделанная в базе данных, все еще существует в любой момент времени.
Мой вопрос: как я сканирую конкретный столбец каждого узла в QTreeWidget?
Это сработало (с небольшими изменениями) Спасибо! –
QTreeWidgetItemIterator it (treeWidget); while (* it) { if ((* it) -> текст (0) == itemText) (* it) -> setSelected (true); ++ it; } – ufukgun
Действительно полезно! – Jatin