Ограничьте количество элементов в QTreeWidget

Есть ли способ ограничить количество элементов, которые может иметь мой QTreeWidget, подобно буферу FIFO?


person Garjy    schedule 19.11.2015    source источник
comment
Когда вы говорите буфер FIFO, я предполагаю, что вы говорите об очереди, которая является одномерной. Виджет дерева поддерживает древовидное представление, отображая древовидную модель. По своей природе он может иметь несколько уровней, каждый из которых содержит несколько элементов. Поэтому оно многомерно. Чего именно вы пытаетесь достичь? Вы пытаетесь ограничить общее количество элементов, количество дочерних элементов, которые может иметь элемент, количество братьев и сестер на уровне дерева или что-то совершенно другое? Что должно произойти, если вы превысите свое ограничение?   -  person Basti Vagabond    schedule 20.11.2015
comment
Я пытаюсь создать дерево, которое будет функционировать как трассировка. Проблема в том, что если я продолжу заполнять дерево, и в нем будет много элементов, графический интерфейс начнет работать медленно и в конечном итоге выйдет из строя. Я думаю, что, ограничив количество элементов, которые может содержать дерево (скажем, 2000), графический интерфейс будет работать намного лучше. Так что да, я пытаюсь как-то ограничить общее количество элементов в дереве.   -  person Garjy    schedule 20.11.2015


Ответы (1)


Я все еще не совсем уверен, что именно вы хотите реализовать. Но вот несколько общих советов.

Если вы хотите получить настраиваемые ограничения и поведение для взаимодействия виджета с базовой структурой данных, вам следует подумать о том, чтобы следовать архитектуре представления модели Qt.

Любой множественный элемент, отображающий QWidget, может быть заменен QView + QModel. Например, вы можете заменить QTreeWidget на QTreeView. Затем вы реализуете свою собственную модель, полученную из QAbstractItemModel, и прикрепляете ее к представлению. Представления будут автоматически адаптироваться к изменениям, внесенным в модель. Таким образом, вы могли бы, например, иметь контейнер в классе модели, и всякий раз, когда элемент добавляется, вы проверяете, достигнуто ли максимальное число, а затем удаляете любой другой элемент.

Эти руководства помогут вам лучше понять, что я предлагаю. Я знаю, что это C++, но все это должно быть легко переведено на pyqt.

person Basti Vagabond    schedule 20.11.2015
comment
Спасибо! Я начал реализовывать QTreeView вместо QTreeWidget и установил максимальное количество элементов. Похоже, он работает нормально, намного быстрее, чем QTreeWidget. Я не использовал пользовательскую модель, я использую QStandardModel. Если это окажется неэффективным, я перейду к индивидуальному заказу, но пока, похоже, он работает нормально. Спасибо и за уроки :) - person Garjy; 23.11.2015
comment
Добро пожаловать. Я тоже люблю учебники. Они быстрые и легкие! Если вам понравился мой ответ, вы можете проголосовать за него. Удачного кодирования. :) - person Basti Vagabond; 23.11.2015