Здравствуйте, гость ( Вход | Регистрация )
JohnZ | Дата 29.9.2014, 18:47 |
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) как ни странно работает безотказно. |
|
lanz | Дата 26.9.2014, 22:38 |
1. QTableView::currentIndex/selectionModel()->selectedIndexes() По индексу можно уже из модели получать все что угодно. Т.к. вы реализуете модель, то можно переопределить метод data, чтобы он по нужной роли выдавал то что надо. Поменять колонки местами можно через QTableView::horizontalHeader()->moveSection(x, y); 2. Тут не совсем понял. У вас есть модель, которая отражает все записи, то в каком порядке вы ее отображаете, и как, это уже зависит от View и Proxy моделей. Поэтому в принципе все равно, как данные представлены в модели. 3. Удалять колонки не стоит. Есть QTableView::hideColumn. Тогда все колонки останутся. |
|
JohnZ | Дата 25.9.2014, 12:52 |
Обозначенный виджет вроде-бы реализовал, как и сказал Юрий, на QTableView. Он действительно смог настроится как QDataTable из QT3, но вотЪ поменять местами колонки, пока у меня проблема. Для QDataTable это можно было делать в Дизайнере визуально, мышой. Тут так пока не получается ... Теперь вторая проблема - нужен, опять-же из QT3 , 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 ) придётся видимо создавать модель по-новой и пере-считывать запись ? Из имеющейся модели вытащить ВСЕ колонки для редактирования уже не получится ? Или можно ? |
|
JohnZ | Дата 10.8.2014, 23:04 |
Твою задачу всё же лучше решать с помощью модель-представление. Использую QSqlTableModel и QTableView. В дизайнере, кроме размещения представления в окне программы, ничего настраивать не нужно - бросил видджет в компоновщик и всё. Дык это в коде, а мне нужно в XML-е. (конфиг XML-й. Это как конфиг в 1С или Ананасе) Если нужен примерчик, - могу выложить. Пример из QT 4.5 simpledommodel (или любой другой) показывает весь состав бизнес-логики ... В коде настрой модель, свяжи с ней представление. Видимо речь идёт о специализированном классе, о котором писал выше lanz, а затем и я ? Если да, то как-раз над ним сейчас ломаю моСк ... Цитата(JohnZ @ 3.8.2014, 20:06) * ... тут помошник нужен, хомосапиенс (А из какого это фильма ?) "Формула любви", Марка Захарова Я когда уже отправил мессагу, то вспомнил этот фильм, - это когда мужик карету разобрал Но "почистить" пост уже не мог ... |
|
Litkevich Yuriy | Дата 8.8.2014, 7:17 |
JohnZ, два твоих сообщения, процитированные мною, противоречат друг другу. Твою задачу всё же лучше решать с помощью модель-представление. Использую QSqlTableModel и QTableView. В дизайнере, кроме размещения представления в окне программы, ничего настраивать не нужно - бросил видджет в компоновщик и всё. В коде настрой модель, свяжи с ней представление. ... тут помошник нужен, хомосапиенс (А из какого это фильма ?) "Формула любви", Марка ЗахароваPS: А как тут свои месаги править ? Или низ-зя ? наберёшь двадцать сообщений вне раздела "Курилка", появится такая возможность (такая защита от спамеров и трепачей) |
|
JohnZ | Дата 3.8.2014, 17:06 |
Как бы ты решал эту проблему в Qt3? ... тут помошник нужен, хомосапиенс (А из какого это фильма ?) По-дедОвски , - я-же выше писал, что у QDataTable из QT3 есть настройка колонок в Дизайнере, плюс к этому к колонкам добавляется 1 или 2 динам-е свойства, - Id и формат (опционально). Пишем специализированный класс, который в курсе что на форме лежит именно QDataTable с доп. свойствами в колонках, и через себя связывает(настраивает) его с полем(и) БД по реальному имени поля в БД. Это как в 3-м Дизайнере положить на форму QDataTable, дать ему коннект к БД и запустить на предпросмотр. Он сразу-же и покажет таблицу, в предпросмотре. Причём показывает без тормозов, даже большие таблицы. Т.е. для решения этой проблемы в 3-ке, нужно было-бы симитировать настройку QDataTable егойным Дизайнером. Может подскажешь для 4-ки более изящное решение ? PS: А как тут свои месаги править ? Или низ-зя ? |
|
Litkevich Yuriy | Дата 3.8.2014, 16:11 |
в QT Дизайнере задать заранее колонки для QTableView нельзя потому что их нет, это представление данных расположенных в модели. Сколько модель скажет, столько представление и нарисует колонок.но дело в том, что заранее не известно, сколько полей будет втаблице, и какие из них и в каком порядке будут в просмотре. Именно для этого и нужен родной QT Дизайнер. Как бы ты решал эту проблему в Qt3? |
|
JohnZ | Дата 2.8.2014, 12:29 |
Я имел в виду динамический BIND полей, как в формах 1С или Ананасе. Через модель как раз и можно сделать динамический бинд. Для биндинга от модели до виджетов есть QDataWidgetMapper http://qt-project.org/doc/qt-5/QDataWidgetMapper.html Вот смотрите, создаете свой кастомный виджет, добавляете ему свойство например ColumnName. Потом в модели доступаетесь до этого свойства и через data выдаете нужные колонки. Если нужно в таблицу - делаете setModel для QTableView, на виджеты биндить через QDataWidgetMapper и т.п. Я до этого пока ещё не "дошёл", - БлагоДарю ! Про этот класс я не знал ... Ес-сно это не должно быть в убыток скорости выполнения создаваемого конфига проекта в Исполнителе, в расчёте на несколько млн записей в БД. В 1С есть такая болезнь, загибается она на больших БД, и есть у меня подозрение, что именно на этом самом BIND-е и Mapper-е в т.ч. ... Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view. Если вы хотите прямо через дизайнер настраивать (а не через xml конфиг например), то придется свой виджет сделать. Но ничего особо сложного или плохого не вижу в этом. Не, видимо мы друг-друга не поняли. Весь конфиг проекта лежит в xml, в этом вся фишка. Гляньте проект Ананас. Если не найдёте, пример его конфига могу кинуть на мыло. Там всё вместе, диалоги, скрипты, структура БД, и т.д. XML-й ui файл являе(ю)тся DomElement-ом XML всего проекта. Думаю, так будет понятней ... |
|
lanz | Дата 2.8.2014, 0:25 |
Я имел в виду динамический BIND полей, как в формах 1С или Ананасе. Через модель как раз и можно сделать динамический бинд. Для биндинга от модели до виджетов есть QDataWidgetMapper http://qt-project.org/doc/qt-5/QDataWidgetMapper.html Вот смотрите, создаете свой кастомный виджет, добавляете ему свойство например ColumnName. Потом в модели доступаетесь до этого свойства и через data выдаете нужные колонки. Если нужно в таблицу - делаете setModel для QTableView, на виджеты биндить через QDataWidgetMapper и т.п. Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view. Если вы хотите прямо через дизайнер настраивать (а не через xml конфиг например), то придется свой виджет сделать. Но ничего особо сложного или плохого не вижу в этом. |
|
JohnZ | Дата 1.8.2014, 20:34 |
Число полей, а так же их порядок и названия зависят от модели, у нее для этого нужно переопределить методы columnCount, headerData и т.п. Почитайте вот это: http://qt-project.org/doc/qt-4.8/model-view-programming.html Я имел в виду динамический BIND полей, как в формах 1С или Ананасе. В свою очередь эти методы могут выдавать разные значения динамически. Т.е. вам не нужно несколько View для разных типов таблиц, а нужно несколько моделей(например). Или одна модель которая настраивается через дизайнер. Вот здесь описано как сделать модель со своими свойствами: http://qt-project.org/doc/qt-4.8/designer-...om-widgets.html Именно так, одна (универсальная) модель которая настраивается через дизайнер(ы) ! Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.4.2024, 20:35 |