crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Виджет из QT3 в QT4, У кого есть QDataTable переделан под 4.5 < ?
lanz
  опции профиля:
сообщение 2.8.2014, 0:25
Сообщение #11


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата(JohnZ @ 1.8.2014, 21:34) *
Я имел в виду динамический BIND полей, как в формах 1С или Ананасе.

Через модель как раз и можно сделать динамический бинд. Для биндинга от модели до виджетов есть QDataWidgetMapper
http://qt-project.org/doc/qt-5/QDataWidgetMapper.html

Вот смотрите, создаете свой кастомный виджет, добавляете ему свойство например ColumnName.
Потом в модели доступаетесь до этого свойства и через data выдаете нужные колонки.
Если нужно в таблицу - делаете setModel для QTableView, на виджеты биндить через QDataWidgetMapper и т.п.

Цитата(JohnZ @ 1.8.2014, 21:34) *
Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся
добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view.

Если вы хотите прямо через дизайнер настраивать (а не через xml конфиг например), то придется свой виджет сделать. Но ничего особо сложного или плохого не вижу в этом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 2.8.2014, 12:29
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Цитата(lanz @ 2.8.2014, 0:25) *
Цитата(JohnZ @ 1.8.2014, 21:34) *
Я имел в виду динамический BIND полей, как в формах 1С или Ананасе.

Через модель как раз и можно сделать динамический бинд. Для биндинга от модели до виджетов есть QDataWidgetMapper
http://qt-project.org/doc/qt-5/QDataWidgetMapper.html

Вот смотрите, создаете свой кастомный виджет, добавляете ему свойство например ColumnName.
Потом в модели доступаетесь до этого свойства и через data выдаете нужные колонки.
Если нужно в таблицу - делаете setModel для QTableView, на виджеты биндить через QDataWidgetMapper и т.п.


Я до этого пока ещё не "дошёл", - БлагоДарю ! Про этот класс я не знал ...
Ес-сно это не должно быть в убыток скорости выполнения создаваемого конфига проекта в Исполнителе,
в расчёте на несколько млн записей в БД. В 1С есть такая болезнь, загибается она на больших БД,
и есть у меня подозрение, что именно на этом самом BIND-е и Mapper-е в т.ч. ...

Цитата(lanz @ 2.8.2014, 0:25) *
Цитата(JohnZ @ 1.8.2014, 21:34) *
Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся
добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view.

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

Не, видимо мы друг-друга не поняли. Весь конфиг проекта лежит в xml, в этом вся фишка. Гляньте проект Ананас.
Если не найдёте, пример его конфига могу кинуть на мыло. Там всё вместе, диалоги, скрипты, структура БД, и т.д.
XML-й ui файл являе(ю)тся DomElement-ом XML всего проекта. Думаю, так будет понятней ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.8.2014, 16:11
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(JohnZ @ 1.8.2014, 22:39) *
в QT Дизайнере задать заранее колонки для QTableView нельзя
потому что их нет, это представление данных расположенных в модели. Сколько модель скажет, столько представление и нарисует колонок.
Цитата(JohnZ @ 1.8.2014, 22:39) *
но дело в том, что заранее не известно, сколько полей будет втаблице, и какие из них и в каком порядке будут в просмотре. Именно для этого и нужен родной QT Дизайнер.
Как бы ты решал эту проблему в Qt3?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 3.8.2014, 17:06
Сообщение #14


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 3.8.2014, 16:11) *
Как бы ты решал эту проблему в Qt3?


... тут помошник нужен, хомосапиенс :rolleyes: (А из какого это фильма ?)

По-дедОвски :rolleyes: , - я-же выше писал, что у QDataTable из QT3 есть настройка колонок в Дизайнере,
плюс к этому к колонкам добавляется 1 или 2 динам-е свойства, - Id и формат (опционально).
Пишем специализированный класс, который в курсе что на форме лежит именно QDataTable с доп. свойствами
в колонках, и через себя связывает(настраивает) его с полем(и) БД по реальному имени поля в БД.
Это как в 3-м Дизайнере положить на форму QDataTable, дать ему коннект к БД и запустить на предпросмотр.
Он сразу-же и покажет таблицу, в предпросмотре. Причём показывает без тормозов, даже большие таблицы.
Т.е. для решения этой проблемы в 3-ке, нужно было-бы симитировать настройку QDataTable егойным Дизайнером.
Может подскажешь для 4-ки более изящное решение ?


PS: А как тут свои месаги править ? Или низ-зя ? :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.8.2014, 7:17
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


JohnZ, два твоих сообщения, процитированные мною, противоречат друг другу.

Твою задачу всё же лучше решать с помощью модель-представление. Использую QSqlTableModel и QTableView. В дизайнере, кроме размещения представления в окне программы, ничего настраивать не нужно - бросил видджет в компоновщик и всё.

В коде настрой модель, свяжи с ней представление.

Цитата(JohnZ @ 3.8.2014, 20:06) *
... тут помошник нужен, хомосапиенс (А из какого это фильма ?)
"Формула любви", Марка Захарова


Цитата(JohnZ @ 3.8.2014, 20:06) *
PS: А как тут свои месаги править ? Или низ-зя ?
наберёшь двадцать сообщений вне раздела "Курилка", появится такая возможность (такая защита от спамеров и трепачей)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 10.8.2014, 23:04
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 8.8.2014, 7:17) *
Твою задачу всё же лучше решать с помощью модель-представление. Использую QSqlTableModel и QTableView. В дизайнере, кроме размещения представления в окне программы, ничего настраивать не нужно - бросил видджет в компоновщик и всё.

Дык это в коде, а мне нужно в XML-е. (конфиг XML-й. Это как конфиг в 1С или Ананасе)
Если нужен примерчик, - могу выложить.
Пример из QT 4.5 simpledommodel (или любой другой) показывает весь состав бизнес-логики ...

Цитата(Litkevich Yuriy @ 8.8.2014, 7:17) *
В коде настрой модель, свяжи с ней представление.

Видимо речь идёт о специализированном классе, о котором писал выше lanz, а затем и я ?
Если да, то как-раз над ним сейчас ломаю моСк ... :(

Цитата(Litkevich Yuriy @ 8.8.2014, 7:17) *
Цитата(JohnZ @ 3.8.2014, 20:06) *
... тут помошник нужен, хомосапиенс (А из какого это фильма ?)
"Формула любви", Марка Захарова

Я когда уже отправил мессагу, то вспомнил этот фильм, - это когда мужик карету разобрал :)
Но "почистить" пост уже не мог ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 25.9.2014, 12:52
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Обозначенный виджет вроде-бы реализовал, как и сказал Юрий, на QTableView.
Он действительно смог настроится как QDataTable из QT3, но вотЪ поменять местами
колонки, пока у меня проблема. Для QDataTable это можно было делать в Дизайнере
визуально, мышой. Тут так пока не получается ... :(

Теперь вторая проблема - нужен, опять-же из QT3 :D , QDataBrowser и связать его с
реализованной моделью. Т.е. по кнопке Enter нужно в диалоге показать выбранную
запись в аналоге QDataBrowser. Вопросы:
1. Как идентифицировать выбранную запись в QTableView ?
Имеется в виду аналог для QComboBox::addItem(aStr, Idd), а затем достать Idd
из QComboBox::itemData ( ui.cb->currentIndex(), int role = Qt::UserRole ) и
определить выбор. Как в модель QTableView вставить этот Idd и затем достать,
для идентификации записи по ключу ?

2. Если Idd в записи будет НЕ первой, и/или первичный ключ составной ?
Это в том смысле, что пример QT со спрятанной колонкой не совсем подходит ...

3. Поскольку в модели для QTableView могут показываются не все колонки, т.к.
удалены из неё ( model.removeColumn(i); ) для формы диалога редактирования
записи ( QDataBrowser ) придётся видимо создавать модель по-новой и пере-считывать запись ?
Из имеющейся модели вытащить ВСЕ колонки для редактирования уже не получится ? Или можно ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 26.9.2014, 22:38
Сообщение #18


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


1. QTableView::currentIndex/selectionModel()->selectedIndexes()
По индексу можно уже из модели получать все что угодно.
Т.к. вы реализуете модель, то можно переопределить метод data, чтобы он по нужной роли выдавал то что надо.
Поменять колонки местами можно через QTableView::horizontalHeader()->moveSection(x, y);
2. Тут не совсем понял. У вас есть модель, которая отражает все записи, то в каком порядке вы ее отображаете, и как, это уже зависит от View и Proxy моделей. Поэтому в принципе все равно, как данные представлены в модели.
3. Удалять колонки не стоит. Есть QTableView::hideColumn. Тогда все колонки останутся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 29.9.2014, 18:47
Сообщение #19


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


lanz, БлагоДарю.

1. Метод data у меня пока отсутствует, т.к. используется стандартная QSqlTableModel.
Сделать так ( +data ) пока архитектурно не получается... :( Может потом изменю ...

2. Тут проблема в том, что Proxy пока не реализован. Провозился я с ним в DomModel,
не заработал он как надо (видимо по незнанию), поэтому здесь тоже ...
lanz, - если Вам на мыло скинуть мин. проэкт, с Proxy (DomModel + QTreeView) сможете помочь ?

3. Вчера почти день угрохал на QTableView::hideColumn, отказывается он прятать колонки :(

QTableView *view;
........................................
view->hideColumn(...);

Может это из-за того, что он загружен и создан динамически с ui-файла ?
Такое впечатление, что hideColumn(i) в либе - пустышка, но при этом
view->removeColumn(i) как ни странно работает безотказно.


Сообщение отредактировал JohnZ - 2.10.2014, 11:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 7:57