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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView QAbstractmodel  (Прочитано 4209 раз)
FakeMoNEy
Гость
« : Ноябрь 27, 2012, 23:56 »

Здравствуйте, у меня есть несколько вопросов
1)Я заполняю таблицу в цикле, на форрме есть statusbar на нем qlabel
Код
C
void MainWindow::createStatusBar()
{
   StatusLabel = new QLabel;
   StatusLabel->setAlignment(Qt::AlignLeft);
   StatusLabel->setMinimumSize(100,10);
   statusBar()->addWidget(StatusLabel);
}
В цикле заполнения таблицы я обновляю статус бар, в нем написано сколько строк обработано вот так [10/1000]
Заполнение идет долго строк бывает много, и если кликнуть на окно программы окошко зависает и самодельный прогресс бар больше не обновляется, пробовал отключать сигналы у виджетов, не помогает, как решить данную проблему, фильтр эвентов?

2)Использую QTableView и QStandardItemModel мне нужно чтобы при нажатии на строку она раскрывалась (что-то вроде QTreeview) но не только вниз, а в две стороны, (т.е строка которая раскрывает подстроки должна стоять в середине этих подстрок), в левом столбце таблицы в зависимости от того можно ли при клике на поле раскрыть группу подстрок, стоит + или - если группа подстрок раскрыта, или ничего если строка без группы подстрок.
Я использую SetRowHidden() в QTableview т.к. ничего другого не нашел.
Строк много бывает до 2 миллионов а может и больше. Соответственно долго заполняет, как ускорить? Наследоваться от QAbstractmodel? Или в создать базу данных? Может есть варианты наследоваться от QAbstractmodel при этом сделать подстроки как описано выше не используя setRowHidden если да можно какой нибудь минималистичный пример с подстроками?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Ноябрь 28, 2012, 00:13 »

1) периодически вызывать (т.е. в своем цикле) qApp->processEvents()
2) думаю для такого большого количества записей лучше использовать БД и QSql...Model
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
FakeMoNEy
Гость
« Ответ #2 : Ноябрь 28, 2012, 01:11 »

Там не всегда такое большое, может быть и 1000, а сворачивание строк можно реализовать с помощью  Qsqlmodel?
Записан
Bepec
Гость
« Ответ #3 : Ноябрь 28, 2012, 07:29 »

Скорость заполнения строк можно ускорить, отключив обновление таблицы на это время Улыбающийся Изжёвано

Если напишешь свою модель, сможешь делать что душе угодно, хоть столбики, хоть гробики Улыбающийся
Записан
FakeMoNEy
Гость
« Ответ #4 : Ноябрь 28, 2012, 09:12 »

Скорость заполнения строк можно ускорить, отключив обновление таблицы на это время Улыбающийся Изжёвано

Если напишешь свою модель, сможешь делать что душе угодно, хоть столбики, хоть гробики Улыбающийся
Обновление отключил, заблокировал сигналы и setupdate отключил у таблицы почти сразу. Все равно долго.

А пример можно? не просто модель, а с гробиками? Улыбающийся
Записан
Bepec
Гость
« Ответ #5 : Ноябрь 28, 2012, 10:48 »

Вынужден отказать из-за отсутствия времени и отсутствии задора.

Model-View в ассистанте подскажет вам.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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