crossplatform.ru

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


  Ответ в Виджет из QT3 в QT4
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
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 :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 ) придётся видимо создавать модель по-новой и пере-считывать запись ?
Из имеющейся модели вытащить ВСЕ колонки для редактирования уже не получится ? Или можно ?
JohnZ Дата 10.8.2014, 23:04
 
Цитата(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) *
... тут помошник нужен, хомосапиенс (А из какого это фильма ?)
"Формула любви", Марка Захарова

Я когда уже отправил мессагу, то вспомнил этот фильм, - это когда мужик карету разобрал :)
Но "почистить" пост уже не мог ...
Litkevich Yuriy Дата 8.8.2014, 7:17
  JohnZ, два твоих сообщения, процитированные мною, противоречат друг другу.

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

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

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


Цитата(JohnZ @ 3.8.2014, 20:06) *
PS: А как тут свои месаги править ? Или низ-зя ?
наберёшь двадцать сообщений вне раздела "Курилка", появится такая возможность (такая защита от спамеров и трепачей)
JohnZ Дата 3.8.2014, 17:06
 
Цитата(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 Дата 3.8.2014, 16:11
 
Цитата(JohnZ @ 1.8.2014, 22:39) *
в QT Дизайнере задать заранее колонки для QTableView нельзя
потому что их нет, это представление данных расположенных в модели. Сколько модель скажет, столько представление и нарисует колонок.
Цитата(JohnZ @ 1.8.2014, 22:39) *
но дело в том, что заранее не известно, сколько полей будет втаблице, и какие из них и в каком порядке будут в просмотре. Именно для этого и нужен родной QT Дизайнер.
Как бы ты решал эту проблему в Qt3?
JohnZ Дата 2.8.2014, 12:29
 
Цитата(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 всего проекта. Думаю, так будет понятней ...
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 и т.п.

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

Если вы хотите прямо через дизайнер настраивать (а не через xml конфиг например), то придется свой виджет сделать. Но ничего особо сложного или плохого не вижу в этом.
JohnZ Дата 1.8.2014, 20:34
 
Цитата(lanz @ 1.8.2014, 20:02) *
Число полей, а так же их порядок и названия зависят от модели, у нее для этого нужно переопределить методы
columnCount, headerData и т.п.
Почитайте вот это: http://qt-project.org/doc/qt-4.8/model-view-programming.html

Я имел в виду динамический BIND полей, как в формах 1С или Ананасе.

Цитата(lanz @ 1.8.2014, 20:02) *
В свою очередь эти методы могут выдавать разные значения динамически. Т.е. вам не нужно несколько View для разных типов
таблиц, а нужно несколько моделей(например). Или одна модель которая настраивается через дизайнер.
Вот здесь описано как сделать модель со своими свойствами: http://qt-project.org/doc/qt-4.8/designer-...om-widgets.html

Именно так, одна (универсальная) модель которая настраивается через дизайнер(ы) !
Виджеты дизайнера "родные", и мне пока нет необходимости создавать свои, нужно лишь к имеющимся
добавить необходимые динамические свойства для BIND-а, например ID поля и его номер колонки в view.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 20:15