Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Racheengel от Декабрь 07, 2008, 15:25



Название: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 07, 2008, 15:25
День добрый всем)
Тупой вопрос - собственно как запретить редактирование QStringListModel (да и вообще моделей в частности).
Вызовом чего то типа setEditable(false) или resetModelFlags(Qt::ItemIsEditable) например.
Что то вообще не нахожу, как такое сделать...
кутя 4.4.х


Название: Re: Запрет редактирования QStringListModel
Отправлено: pastor от Декабрь 07, 2008, 15:38
Это можно сделать через view. См. QAbstractItemView::setEditTriggers


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 07, 2008, 16:19
Ага, точно ) благодарствую :)

Еще одна проблема - надо запихнуть в модель около 600 000 строк.
Само по себе назначение модели происходит довольно быстро (1-2 сек, это вполне приемлемо).
Но при отрисовке проходит 10-15 секунд, прежде чем модель обновится (при этом весь гуй висит).
Сигналы и репаинты отключаю, как надо:
   ui.lvIndex->blockSignals(true);
   ui.lvIndex->setUpdatesEnabled(false);
В чем может быть дело?


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 08, 2008, 10:41
Написал репорт троллям. ИМХО баг серьезный.

Цитировать

Product
    Qt
Function
    Itemviews
Version
    4.4.3
Platform
    Windows XP
Platform details
    Intel Core2 Duo CPU 1.9x2 mHz, 2gb RAM
Compilers
    MSVC
Compiler details
Subject
    QListView freezes GUI
What I did
    Using QStringList model, I've populated a hidden QListView with the 600 000 lines.
    Then I called show() for it in a certain moment.
What I expected to see
    Displaying of QListView with 600000 items.
What I got instead
    There is 5-10 second delay after show() before QListView appears.
    GUI is frozen completely this period.
More information
    Filling QStringList and model itself is a quite fast, but calling show() causes GUI to become frozen
    (seems that it happens while processing painting event of QListView).



Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 09, 2008, 11:12
Написали в ответ, что 600 000 итемов для модели - это МНОГО...
О_о


Название: Re: Запрет редактирования QStringListModel
Отправлено: pastor от Декабрь 09, 2008, 12:18
Написали в ответ, что 600 000 итемов для модели - это МНОГО...
О_о

Вобще для модели как таковой или для QStringListModel? Попробуй написать свою модель.

ЗЫ: Пол года назад написал модель для проекта KDChart (KDAB). Хранит несколько миллионов строк, проблем и жалоб пока не поступало )


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 09, 2008, 13:29
Я сначала пробовал с QStringListModel, потом сделал свою. Та же лажа.
Похоже, что не модель тормозит, а вьюха.
Причем именно при первом показе.


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 10, 2008, 02:22
Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).


Название: Re: Запрет редактирования QStringListModel
Отправлено: Sergey B. от Декабрь 10, 2008, 08:51
Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).

отпиши тролям.  ;D
в ассистенте написано:
Код:
By default, this property is false.


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 10, 2008, 11:21
Блин, имел в виду, что нельзя оставлять false... (писал ночью в полусне)
Когда false, для каждой строки выполняется измерение высоты согласно установленного шрифта,
а Qt со шрифтами работает "ну очень" быстро.
True спасает отцов русской демократии :)


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 10, 2008, 15:18
Тролли пообещали обновить доку :)


Название: Re: Запрет редактирования QStringListModel
Отправлено: SABROG от Декабрь 10, 2008, 17:52
Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).

Это относится только к QListView насколько я понял ? В других итемвьюверах я такого метода не нашел...

Если я правильно понял, то в итоге все сводится к вызову sizeHint() и по сути для других вьюшек можно этот метод переопределить через делегата или использовать какие-нибудь трюки типа фиксированного размера строк.


Название: Re: Запрет редактирования QStringListModel
Отправлено: Racheengel от Декабрь 10, 2008, 19:02
Да, получается, что это только для QListView.
Для дерева есть setUniformRowHeight() помоему.
Хотя имхо логичней бы было иметь данную функцию в QAbstractItemView - действия по сути одни и те же...