Russian Qt Forum
Ноябрь 27, 2024, 00:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрет редактирования QStringListModel  (Прочитано 7583 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« : Декабрь 07, 2008, 15:25 »

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Декабрь 07, 2008, 15:38 »

Это можно сделать через view. См. QAbstractItemView::setEditTriggers
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Декабрь 07, 2008, 16:19 »

Ага, точно ) благодарствую Улыбающийся

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Декабрь 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).

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Декабрь 09, 2008, 11:12 »

Написали в ответ, что 600 000 итемов для модели - это МНОГО...
О_о
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Декабрь 09, 2008, 12:18 »

Написали в ответ, что 600 000 итемов для модели - это МНОГО...
О_о

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

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Декабрь 09, 2008, 13:29 »

Я сначала пробовал с QStringListModel, потом сделал свою. Та же лажа.
Похоже, что не модель тормозит, а вьюха.
Причем именно при первом показе.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Декабрь 10, 2008, 02:22 »

Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #8 : Декабрь 10, 2008, 08:51 »

Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).

отпиши тролям.  Смеющийся
в ассистенте написано:
Код:
By default, this property is false.
« Последнее редактирование: Декабрь 10, 2008, 08:53 от Sergey B. » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Декабрь 10, 2008, 11:21 »

Блин, имел в виду, что нельзя оставлять false... (писал ночью в полусне)
Когда false, для каждой строки выполняется измерение высоты согласно установленного шрифта,
а Qt со шрифтами работает "ну очень" быстро.
True спасает отцов русской демократии Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Декабрь 10, 2008, 15:18 »

Тролли пообещали обновить доку Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
SABROG
Гость
« Ответ #11 : Декабрь 10, 2008, 17:52 »

Нашел в чем проблема.
Не забывать ставить setUniformItemSizes(false).

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

Если я правильно понял, то в итоге все сводится к вызову sizeHint() и по сути для других вьюшек можно этот метод переопределить через делегата или использовать какие-нибудь трюки типа фиксированного размера строк.
« Последнее редактирование: Декабрь 10, 2008, 18:04 от SABROG » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Декабрь 10, 2008, 19:02 »

Да, получается, что это только для QListView.
Для дерева есть setUniformRowHeight() помоему.
Хотя имхо логичней бы было иметь данную функцию в QAbstractItemView - действия по сути одни и те же...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 22.