Форум сайта python.su
Всем привет.
# http://www.prog.org.ru/topic_4344_0.html
# http://www.prog.org.ru/topic_4202_0.html
from PyQt4 import QtSql, QtGui,QtCore
import sys
views = []
def initializeModel(model):
model.setQuery("select user.user from user")
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant(QtCore.QObject.tr(model, "user")))
def createView(title, model):
view = QtGui.QTableView()
views.append(view)
view.setModel(model)
view.setWindowTitle(title)
view.show()
def createConnection():
db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
db.setHostName('localhost')
db.setDatabaseName("mysql")
db.setUserName("root")
db.setPassword("****")
if not db.open():
QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"),
QtGui.qApp.tr("Unable to establish a database connection.\nClick Cancel to exit."),
QtGui.QMessageBox.Cancel)
return False
query = QtSql.QSqlQuery()
# query.exec_('SET NAMES utf8_general_ci;')
query.exec_("""SET NAMES 'cp1251'""")
return True
class CustomSqlModel(QtSql.QSqlQueryModel):
def data(self, index, role):
value = QtSql.QSqlQueryModel.data(self, index, role)
if value.isValid() != True:
pass
else:
print "value ok"
return value
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
codec = QtCore.QTextCodec.codecForName("cp1251");
QtCore.QTextCodec.setCodecForLocale (codec)
QtCore.QTextCodec.setCodecForCStrings (codec)
QtCore.QTextCodec.setCodecForTr (codec)
defcodec = QtCore.QTextCodec.codecForLocale()
print defcodec.name()
if not createConnection():
sys.exit(1)
CustomModel = CustomSqlModel()
initializeModel(CustomModel)
createView(QtCore.QObject.tr(CustomModel, "Custom Query Model"), CustomModel)
app.setQuitOnLastWindowClosed(True)
sys.exit(app.exec_())
Офлайн
UP. Столкнулся с той же проблемой: QTableView показывает таблицу с числом строк, соответствующим реальным данным, но все ячейки пустые. Сильно сомневаюсь, что дело в кодировке, поскольку не отображаются вообще никакие символы (даже цифры). При этом запросы посредством QSqlQuery (пробовал создавать таблицы и вставлять в них данные) отрабатывают корректно: таблицы создаются и данные в них появляются, проверял на сервере средствами самого мускула. Мистика какая-то.
Офлайн
Припоминаю что как-то тоже столкнулся с похожей штукой(И да даже ID не был виден). Фишка была в том что надо данные преобразовать к типу:
ну например типа toString() или пришлось оборачивать в str():
короче допустим что-то типа этого:
while (query.next()) {
QString name = query.value(0).toString();
int salary = query.value(1).toInt();
qDebug() << name << salary;
}
Офлайн
apologize828Все это конечно верно, но только в том случае, если данные берутся из таблицы “вручную” с помощью query. А тут у нас люди работают с моделью, которая сама отрабатывает все данные (посмотрите пример querymodel.py там никакого приведения типов нет:)). Могу посоветовать ТС попробовать через query данные выудить, но без особой надежды, т.к. по всему видно, что ошибка где-то в недрах Qt (код достаточно короткий ошибок нет, почти вся работа выполняется классами самого Qt). Еще мона попробовать пример querymodel.py запустить только подключение к своей базе сделать, если не заработает, то переустанавливать/пересобирать и танцевать с бубном.
надо данные преобразовать к типу
Офлайн
dartNNNТочно точно,что то я поспешил)! Я вспомнил, я тогда еще с QTableWidget работал)))
Все это конечно верно, но только в том случае, если данные берутся из таблицы “вручную” с помощью query. А тут у нас люди работают с моделью, которая сама отрабатывает все данные (посмотрите пример querymodel.py там никакого приведения типов нет:)).
Офлайн