![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Имеется QTableView* tblLicences. Это представление зависит от модели QSqlTableModel* modelLicView. Но есть желание, чтобы отображение таблички было немного другим, чем в базе данных. Для этого создал след. класс:
Смысл такой, что таблица должна отображаться так: Имя лицензии | Локальный путь доступа к лицензии | Дата создания | Список серийных номеров. У меня есть список QList<ViewLicence*> listView, который я уже заполнил из модели. А в БД это отображается следующим образом [attachment=497:table.JPG] Как мне отобразить список QList<ViewLicences*> listView в представлении? Поможете, а то не сообразить что-то? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
конечное представление должно предоставлять возможность редактировать данные?
|
|
|
AD |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#7
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
тогда сделай запрос, положи его в модель запроса (QSqlQueryModel) ну а к ней прицепи представление Имя лицензии | откуда берется имя лицензии?Имя из БД. На картинке ведь видны данные БД. Там все это есть. А с методом не очень понял. Какой запрос сделать? Можешь подсказать, пожалуйста? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
т.е. имя лицензии это просто имя файла без пути? именно. Вообще, если привести пример из картинки, то получается, что есть всего две строки у таблицы представления Имя | Путь | Дата | Серийные номера 1 database.lic | D:/Projects/Win32/Bin/Release/LicenceBuilderGui/DBNAV1\ | 16.03.2009 17:56:23 | 22001 22004 22005 22009 2 database1.lic | D:/Projects/Win32/Bin/Release/LicenceBuilderGui/DBNAV1\ | 17.03.2009 15:13:59 | 22009 M-22001 MAKET |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#11
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Таблица удобнее пользователю. Да и нагляднее.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#13
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Если перенести номера в отдельный столбик, то да, такое. Я именно так и показывал. Лицензия | Путь к ней | Дата создания | Список номеров (отдельный столбик, а не в том же, что и лицензия) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#14
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
для случая таблицы, а не дерева можно сделать так:
но это без имени файла лицензии.Для создания имени у меня есть два варианта, оба я непробовал: 1) Использовать возможности БД, если таковые есть, по формированию запроса так, чтобы можно было выкинуть из строки все что до последнего слэша. 2) Использовать между представлением и моделью еще одну - промежуточную модель. |
|
|
AD |
![]()
Сообщение
#15
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
но это без имени файла лицензии. Для создания имени у меня есть два варианта, оба я непробовал: 1) Использовать возможности БД, если таковые есть, по формированию запроса так, чтобы можно было выкинуть из строки все что до последнего слэша. 2) Использовать между представлением и моделью еще одну - промежуточную модель. Спасибо, попробую. Смысл в том, что хочу именно с путем и файлом лицензии. А как через промежуточную модель или через SQL? Но в любом случае, спасибо. Данный вариант уже кое-что! ![]() |
|
|
AD |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Блин, получилось не так, как я хотел. Есть желание, чтобы это выглядело так, две записи, в которых в последнем столбце перечислены серийные номера, принадлежащие данным лицензиям. А исходя из приведенного кода получилось то же, что если сделать обычную выборку без первого столбца.
|
|
|
AD |
![]()
Сообщение
#17
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Кое-что из ассистента почитал и сделал так:
Но на экране вижу только квадрати и цифру 1. В чем ошибка? Где и что я не так делаю? ![]() Кто-нибудь может помочь? Очень и очень нужно. Буду благодарен за помощь! |
|
|
BRE |
![]()
Сообщение
#18
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Почему не сделать свою модель и не обрабатывать нужный столбец "Серийный номер"?
Все данные есть, запросил view серийные номера для нужной строки - открыл нужный файл, прочитал их в строку через ";" (закешировать можно), вернул из data(). Или в конструкторе модели сделал запрос, загнал все в список структуры (попутно читая серийные номера из файлов), а дальше в data() возвращай? Или я чего не понял? ![]() |
|
|
AD |
![]()
Сообщение
#19
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Все данные есть, запросил view серийные номера для нужной строки - открыл нужный файл, прочитал их в строку через ";" (закешировать можно), вернул из data(). Или в конструкторе модели сделал запрос, загнал все в список структуры (попутно читая серийные номера из файлов), а дальше в data() возвращай? Или я чего не понял? ![]() Не понял, как это реализовать? Как понять, свою модель? На основе модели QSqlTableModel? Или что-то еще? |
|
|
BRE |
![]()
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#21
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
еще несколько уточнений:
1) Правильно понял, что заполненный QListView<ViewLicence*> listView передать этому наследнику и заполнить значениями модель? 2) Каким образом можно заполнять, с помощью какой функции: setData? Сообщение отредактировал AD - 18.3.2009, 14:08 |
|
|
BRE |
![]()
Сообщение
#22
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
LicenceModel
В данном примере ты должен заполнить список лицензий извне, модель будет использовать его для вывода. Можно переделать и формировать этот список в конструкторе. Можно в самой моделе читать данные из БД. Все можно. ![]() Сообщение отредактировал BRE - 18.3.2009, 14:24 |
|
|
AD |
![]()
Сообщение
#23
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо. Попробую!
![]() |
|
|
AD |
![]()
Сообщение
#24
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#25
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
ActionModel( const LicenceList &actions, QObject *parent = 0 ); - имелся в виду конструктор? ![]() Да, забыл исправить. ![]() А какой должно быть значение переменной role, если разрешен только просмотр записей? Когда view начинает себя рисовать, она у модели спрашивает: * какой текст нарисовать в ячейке (Qt::DisplayRole) * как этот текст расположить (Qt::TextAlignmentRole) * каким фонтом нарисовать (Qt::FontRole) и т.д. В data перехватываешь и обрабатываешь те роли которые нужны. Сообщение отредактировал BRE - 18.3.2009, 17:19 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#26
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#27
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Не могу понять, по какой причине на вот этом break вылетает из цикла:
Это в функции createList! Вот реализация кода: Source
По какой причине select() не срабатывает, почему нет выборки из указанной таблицы? Сообщение отредактировал AD - 19.3.2009, 11:47 |
|
|
BRE |
![]()
Сообщение
#28
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Раскрывающийся текст
|
|
|
AD |
![]()
Сообщение
#29
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Сделал наследником от QAbstractTableModel. Но теперь совсем не заходит в виртуальную функцию data().
Почему? Да и у этой модели нет select(). При присвоении QTableView этой модели, нужная таблица должна сама определиться? Или надо писать свой select()? |
|
|
BRE |
![]()
Сообщение
#30
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Сделал наследником от QAbstractTableModel. Но теперь совсем не заходит в виртуальную функцию data(). Почему? Да и у этой модели нет select(). При присвоении QTableView этой модели, нужная таблица должна сама определиться? Или надо писать свой select()? В конструкторе StatisticModel вызывается метод createList, в котором исполняется select() для внутренней модели QSqlTableModel, которая используется для получения данных из БД. После отработки метода createList все данные лежат в списке listView, для отображения в представлении база данных больше не нужна. Проверь после вызова метода createList, сколько записей реально лежат в этом списке (это количнство строк). Проверь сколько записей лежат в списке listClmNames (это количество столбцов). |
|
|
AD |
![]()
Сообщение
#31
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Виноват. Когда заполнил названия столбцов, все отобразилось!!!
|
|
|
AD |
![]()
Сообщение
#32
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Вот окончательный вариант решения!
![]() Model
|
|
|
BRE |
![]()
Сообщение
#33
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Вот объясни мне, для чего используются указатели на LicenceData, а не сами объекты? ![]() Где они удаляются, после разрушения объекта StatisticModel. Сейчас у тебя память будет утекать. А описал бы список так QList<LicenceData> listView и проблем бы не было. В чем тайный смысл? ![]() |
|
|
AD |
![]()
Сообщение
#34
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Уговорил
![]() ![]() А вообще вот почему указатель, а не объект: 1) Данные могут со временем измениться, чтобы если что создать потомка. 2) Описан класс в другом файле - меньшее количество компиляции.
Вот так. |
|
|
BRE |
![]()
Сообщение
#35
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
А вообще вот почему указатель, а не объект: 1) Данные могут со временем измениться, чтобы если что создать потомка. 2) Описан класс в другом файле - меньшее количество компиляции. Аргумент 2 - можно обойти. Аргумент 1 - если есть такая необходимость, то конечно. (Я к этой структуре относился как к вспомогательно/внутренней). Ухожу, ухожу.... ![]() ![]() Ан нет, еще про одну штучку напомню: ![]() Цитата из assistant Цитата void qDeleteAll ( ForwardIterator begin, ForwardIterator end ) Deletes all the items in the range [begin, end) using the C++ delete operator. The item type must be a pointer type (for example, QWidget *). Example: QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear(); Notice that qDeleteAll() doesn't remove the items from the container; it merely calls delete on them. In the example above, we call clear() on the container to remove the items. See also forward iterators. void qDeleteAll ( const Container & c ) This is an overloaded member function, provided for convenience. This is the same as qDeleteAll(c.begin(), c.end()). Сообщение отредактировал BRE - 19.3.2009, 17:47 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#36
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
так тему почистил, отделил тему kuler'а, теперь она здесь: QSqlQueryModel + QTableView, Данные не отображаются
|
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 12:33 |