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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: HeaderView для иерархических заголовков  (Прочитано 53145 раз)
phonon
Гость
« Ответ #30 : Май 24, 2009, 17:09 »

Беда! Шокированный
Записан
Barmaglodd
Гость
« Ответ #31 : Май 25, 2009, 05:23 »

2) отчеты со сложными заголовками (да и с простыми) наполняются в основном из БД, поэтому было бы здорово иметь пример работы по заполнению таблицы из БД.
Такого примера нет и никогда не будет (во всяком случае, я его писать не буду). Я не знаю как вы эти заголовки в базе храните, не знаю какую СУБД используете и как доступ к базе организуете.

@Константин. Да ладно, тролли сами выкладывали в блоге пример с "распечаткой", где таблица тупо в картинку рендерилась. Подмигивающий
Записан
phonon
Гость
« Ответ #32 : Май 26, 2009, 20:23 »

заголовки ни при чем, их хоть в xml можно (лучше) хранить, хоть в тексте программы при написании конкретного отчета. Вопрос в наиболее общей форме таков - как подцепить , модель данных QSqlTableModel, QSqlRelationalTableModel и прочие к этой вьюхе. Без ответа на этот вопрос работа особой ценности не имеет. А потребность в решении вопроса возникает у каждого, кто пишет реальные программы.
Записан
Rikland
Гость
« Ответ #33 : Май 26, 2009, 23:03 »

Вопрос в наиболее общей форме таков - как подцепить , модель данных QSqlTableModel, QSqlRelationalTableModel и прочие к этой вьюхе.

phonon, а не разъяснишь ли свой вопрос? Не очень понимаю - в чем проблема: у меня идет отображение данных QSqlQueryModel'и + красивый заголовок. Все нормально.

Хочу сказать отдельное СПАСИБО автору Barmaglodd: заголовки потрясающие!  Смеющийся
Записан
Barmaglodd
Гость
« Ответ #34 : Май 28, 2009, 07:07 »

Я сам не использую QSql(я использую otl+самописные модели), так что потребности в решении этого вопроса у меня лично не возникло.
Могу лишь предложить несколько вариантов.
1. Наследуемся от QSqlTableModel, и в методе data для HorizontalHeaderDataRole и VerticalHeaderDataRole возвращаем указатель на соответствующие модели заголовков. Откуда будут браться данные в этих моделях целиком зависит от вас.
2. Делаем наледника от QSortFilterProxyModel, подсовываем ему вашу QSqlTableModel, а в методе data возвращаем указатели на модели заголовков.
3. Можно попробовать сделать у QSqlTableModel setData с ролями HorizontalHeaderDataRole и VerticalHeaderDataRole и указателями на модели заголовков. Сам это не пробовал, скорее всего не сработает.
4. Можно попросить Rikland'а выложить кусок своего кода Подмигивающий

PS. XML вообще нужен в очень редких случаях, и лучше его использовать только, когда без него ну никак не обойтись, IMHO Подмигивающий

@Rikland Спасибо Улыбающийся
Записан
Rikland
Гость
« Ответ #35 : Май 28, 2009, 18:32 »

4. Можно попросить Rikland'а выложить кусок своего кода Подмигивающий
Ребят, да мне даже кода не жалко, тем более, что его там 5 строк. Просто кажется, что я вопроса не понимаю.  Непонимающий
Вот такой результат (см. картинку вложенную) что ли нужен?
Записан
phonon
Гость
« Ответ #36 : Май 28, 2009, 18:38 »

4. Можно попросить Rikland'а выложить кусок своего кода Подмигивающий
Ребят, да мне даже кода не жалко, тем более, что его там 5 строк. Просто кажется, что я вопроса не понимаю.  Непонимающий
Вот такой результат (см. картинку вложенную) что ли нужен?

Не доводите до смертоубийства, это то что нужно, дайте код и можете спать спокойно - одного человека вы точно осчастливите!!
Записан
Rikland
Гость
« Ответ #37 : Май 28, 2009, 20:53 »

@phonon: ну примерно так...

Код:
ExampleModel *em = new ExampleModel(this);
HierarchicalHeaderView *hv = new HierarchicalHeaderView(Qt::Horizontal, ui->tableView);
hv->setModel(em);
ui->tableView->setHorizontalHeader(hv);
QSqlQueryModel qModel;
qModel.setQuery(“SELECT * FROM tableName”);
ui->tableView->setModel(&qModel);
Записан
Barmaglodd
Гость
« Ответ #38 : Май 29, 2009, 07:14 »

Блин, вообще-то это баг. Грустный Может привести к падению программы, я не чищу указатель на модель заголовка при установке новой модели в QTableView.
Записан
phonon
Гость
« Ответ #39 : Май 29, 2009, 17:18 »

Блин, вообще-то это баг. Грустный Может привести к падению программы, я не чищу указатель на модель заголовка при установке новой модели в QTableView.
 
Ну, вот, даже у людей сведущих разногласия, а куда бедному крестьянину податься, только от сохи к Qt приторочившемуся? А казалось бы совершенно естественная потребность простой механизм подключения модели данных к естественному и  нужному всем иерархическому заголовку. И конечно, для начинающих и даже не очень начинающих, я полагаю, просто необходим пример кода, как это сделать. Устал уже взывать к сильным мира сего   Показает язык
Записан
phonon
Гость
« Ответ #40 : Май 30, 2009, 21:17 »

@phonon: ну примерно так...

Код:
ExampleModel *em = new ExampleModel(this);
HierarchicalHeaderView *hv = new HierarchicalHeaderView(Qt::Horizontal, ui->tableView);
hv->setModel(em);
ui->tableView->setHorizontalHeader(hv);
QSqlQueryModel qModel;
qModel.setQuery(“SELECT * FROM tableName”);
ui->tableView->setModel(&qModel);
И тем не менее (несмотря на предупреждение о возможности падения программы) код Rikland'а сработал! За что ему огромное спасибо!!!
Записан
Rikland
Гость
« Ответ #41 : Июнь 01, 2009, 19:31 »

@phonon
Да на здоровье, рад если помог. Теперь главное - лишь бы и правда прога не рухнула  Подмигивающий
Записан
Barmaglodd
Гость
« Ответ #42 : Июнь 02, 2009, 08:08 »

На qt-apps.org новая версия с исправлениями.
Теперь код выложенный Rikland'ом не будет работать.

Работать будет такой код.
Код:
ExampleModel *em = new ExampleModel(this);
QSqlQueryModel qModel;
qModel.setQuery(“SELECT * FROM tableName”);
ui->tableView->setModel(&qModel);
HierarchicalHeaderView *hv = new HierarchicalHeaderView(Qt::Horizontal, ui->tableView);
hv->setModel(em);
ui->tableView->setHorizontalHeader(hv);

Надо переустановку модели для hv делать после установки модели для tableView.
Записан
Rikland
Гость
« Ответ #43 : Июнь 02, 2009, 17:48 »

@Barmaglodd: спасибо, поюзаем  Смеющийся
Записан
Barmaglodd
Гость
« Ответ #44 : Июнь 03, 2009, 06:22 »

setModel у заголовка вызывается таблицей при установке модели (поэтому код с прямым вызовом не очень красив), я всё-таки рекомендую либо наследоваться от QSqlQueryModel, либо сделать прокси модель.
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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