Поскольку я писал несколько раз за последние несколько месяцев, я пишу приложение для дневника / дневника на Qt. Записи сортируются в QTreeWidget по году, месяцу, дню и записи (конфигурация по умолчанию, которая сортирует записи по дням) или по году, месяцу и записи (где все записи из одного месяца сгруппированы вместе)
Узлы ввода имеют два столбца: первый виден и содержит имя записи. Второй столбец невидим и содержит номер строки соответствующей записи в базе данных. Когда эта запись выбрана, программа выполняет запрос выбора на основе этого номера строки и отображает содержимое. Корневой узел, год, месяц и (и день, если он включен) также имеют второй столбец, но номер строки в них всегда равен -1. (допустимое количество строк начинается с 0)
На панели инструментов журнала уже есть кнопки «Назад» и «Вперед», которые позволяют пользователю просматривать следующую и предыдущую записи. Хотя эта функция уже работает, текущий выбранный элемент в дереве не меняется вместе с ней, и я пытаюсь это исправить.
Я решил, что лучший способ сделать это - функция цикла, которая сканирует значения второго скрытого столбца каждого, пока не будет найден правильный номер строки. Каждый щелчок кнопок «назад» / «вперед» снова вызывает эту функцию, поэтому выбранный узел всегда будет соответствовать текущей просматриваемой записи, как только я получу эту работу.
Недостатком является то, что этот метод может быть медленным, если база данных становится огромной, но я ничего не могу с этим поделать. Пользователь может удалить записи или перемешать их, поэтому простое использование rownumber ++ или rownumber-- может вызвать проблемы. Поскольку база данных не заполняет пропущенные номера строк, а просто переходит к следующей, могут возникнуть проблемы, если программа всегда предполагает, что каждая строка, когда-либо созданная в базе данных, все еще существует в любой момент времени.
Мой вопрос: как мне отсканировать определенный столбец каждого узла в QTreeWidget?