Форум сайта python.su
Как с помощью QtSql сделать как на картинке
на форуме нашел как вставляют ComboBox в TableView, но мне желательно отдельным виджетом.
Нужно ли создавать свой класс делегата на основе QItemDelegate?
И как правильно переписать эту строку:
QtCore.QObject.connect(self.tableView.selectionModel(), QtCore.SIGNAL('currentRowChanged(QtCore.QModelIndex(),QtCore.QModelIndex())'),self.mapper, QtCore.SLOT('setCurrentModelIndex(QtCore.QModelIndex()'))
Как я понял selectionModel посылает сигнал при изменении выделения в таблице в QDataWidgetMapper, которая должна изменить текущий индекс комбобокса.
В идеале мне вообще таблица не нужна. Просто несколько комбобоксов и текстедитов. В одном из комбобоксов выбирается существующая запись из базыданных. Если такой записи нет, то данные вводятся в виджеты и создается новая запись в БД. Что-то подобное я уже прикрутил без использования QtSql. Но хотелось бы попробовать через модель и QDataWidgetMapper
Офлайн
https://evileg.com/ru/post/71/
что-то похожее
Офлайн
Мне бы на питоне
Офлайн
Вот как-то так получилось:
class FirstWindDialog(QtGui.QWidget, FORM_CLASS): def __init__(self): """Constructor.""" QtGui.QTabWidget.__init__(self) self.setupUi(self) self.db=self.dbOpen() self.model=QtSql.QSqlTableModel() self.model.setTable("project") self.model.select() #self.tableView.setModel(self.model) self.comboBox.setModel(self.model) self.comboBox.setModelColumn(6) self.mapper=QtGui.QDataWidgetMapper() self.mapper.setModel(self.model) #self.mapper.setItemDelegate(QtGui.QItemDelegate(self.model)) self.mapper.addMapping(self.comboBox,self.model.fieldIndex("conclus_num")) self.mapper.addMapping(self.lineEdit, self.model.fieldIndex("proj_comp")) self.mapper.toLast() self.comboBox.setCurrentIndex(self.mapper.currentIndex()) #QtCore.QObject.connect(self.tableView.selectionModel(), QtCore.SIGNAL('currentRowChanged(QtCore.QModelIndex(),QtCore.QModelIndex())'),self.model, QtCore.SLOT('setCurrentModelIndex(QtCore.QModelIndex()')) def dbOpen(self): db = QtSql.QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName('/home/alex/Yandex.Disk/coding/expert/expert1.sqlite') db.open() return db
Офлайн
для баз данный Qt - это клиентский гуй и возможность SQL запросы делать, не более. лучше работай с SqlQuery, SqlQueryModel. SqlTableModel лично я не использую - имхо сделана на “от@@бись”. в питоне полно модулей для работы с БД - sqlite3, MySqlDb.
основы
Отредактировано vic57 (Фев. 18, 2017 03:04:15)
Офлайн
> Как с помощью QtSql сделать как на картинке
QtSql тебе нафиг не нужен.
> Нужно ли создавать свой класс делегата на основе QItemDelegate?
Да.
> В идеале мне вообще таблица не нужна. Просто несколько комбобоксов и текстедитов.
ИХМО тебе как раз details не нужен. Всё редактируется в таблице.
Офлайн
RodegastМне база данных нужна для того чтобы … Да в принципе она мне сильно то и не нужна. Только для того чтобы сохранять какие-либо данные для отчета. В принципе можно было использовать csv или xml. Чтобы не сохранять в переменных данные с разных форм, пока они не понадабятся. Поэтому TableView и не нужен (не удобно - столбцов может быть много все данные не будут видны. Еще БД нужна для выполнения пространственных запросов в автоматическом (через тригеры) и ручном режиме.
ИХМО тебе как раз details не нужен. Всё редактируется в таблице.
RodegastПока для того что я сделал - не нужно. Наверно, для вставки новой записи средствами Модели он и понадобится
> Нужно ли создавать свой класс делегата на основе QItemDelegate?
Да.
Отредактировано axinax (Фев. 18, 2017 20:16:03)
Офлайн
> Мне база данных нужна для того чтобы …
Вот с этого и стоило начинать. Делигат нужен для отрисовки / редактирования ячеек таблицы. Если таблицы нет, то и делигат не нужен.
> на одной из веток кто-то из уважаемых форумчан высказал мысль, что если используешь Qt то и с БД надо общаться через Qt.
Мало ли кто что пишет. Если у тебя есть готовое решение на python-е, то переделывать его не надо.
Офлайн
axinaxРодной для питона формат pickle. Если надо чтобы файлы глазками читались то я бы рекомендовал yaml, json, cfg поскольку у вас форм много и обычным csv тут не обойтись. xml Содержит много рюшечек, которые вам не нужны, а при чтении и записи приводят к постоянной головной боли
В принципе можно было использовать csv или xml.
Отредактировано doza_and (Фев. 21, 2017 06:29:06)
Офлайн