我的 QSqlQueryModel 在列表视图中不显示数据
My QSqlQueryModel doesn't show data in the listview
我正在玩QSqlQueryModel,但我现在完全卡住了。我一整天都在寻找解决办法,但到目前为止还没有找到。
我所做的工作是,它从我的sqlite数据库中提取数据,但出于某种原因,我不能在我的列表视图中显示它。看起来我的角色名不存在。
我收到类似....的信息ReferenceError: id没有定义.....
我使用的例子来自:http://qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML
这两个例子我都试过了,但我总是遇到同样的问题。
我的ccp文件是这样的:
#include "artistssqlmodel.h"
const char* ArtistsSqlModel::COLUMN_NAMES[] = {
"id",
"word",
NULL
};
const char* ArtistsSqlModel::SQL_SELECT = "SELECT id, word FROM dictionary LIMIT 5";
ArtistsSqlModel::ArtistsSqlModel(QObject *parent) :
QSqlQueryModel(parent)
{
mydb=QSqlDatabase::addDatabase("QSQLITE");
QString dbPath = "E://mydb.db";
mydb.setDatabaseName(dbPath);
connectToDb();
int idx = 0;
QHash<int, QByteArray> roleNames;
while( COLUMN_NAMES[idx]) {
roleNames[Qt::UserRole + idx + 1] = COLUMN_NAMES[idx];
idx++;
}
//roleNames(roleNames);
refresh();
}
void ArtistsSqlModel::connectToDb()
{
//QString bla = "Default";
if(!mydb.open())
{
qDebug() << "Database didnt open";
}
else
{
qDebug() << "Your database is open";
}
}
void ArtistsSqlModel::refresh()
{
this->setQuery(SQL_SELECT);
}
QVariant ArtistsSqlModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlQueryModel::data(index, role);
if(role < Qt::UserRole)
{
value = QSqlQueryModel::data(index, role);
}
else
{
int columnIdx = role - Qt::UserRole - 1;
QModelIndex modelIndex = this->index(index.row(), columnIdx);
value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
}
return value;
}
和我的QML文件看起来像这样
import QtQuick 2.2
import QtQuick.Window 2.1
Window {
visible: true
width: 800
height: 800
ListView{
anchors.fill:parent
model:artistsModel
delegate: Item{
width:parent.width
height: width/10
Text {
id: name
text: word
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
anchors.fill:parent
}
}
}
}
我希望我提供了足够的信息,我希望有人知道我做错了什么。我是qt和c++的新手,但通常我可以通过一些研究来解决问题。这一次我完全卡住了,我需要找出一种方法从我的sqlite数据库中获取数据到我的listsviews。
编辑:感谢您的回复,这里是所有其余的代码(这些是我得到的文件)artistssqlmodel.h文件
#ifndef ARTISTSSQLMODEL_H
#define ARTISTSSQLMODEL_H
#include <QObject>
#include <QSqlQueryModel>
#include <QDebug>
class ArtistsSqlModel : public QSqlQueryModel
{
Q_OBJECT
public:
explicit ArtistsSqlModel(QObject *parent);
void refresh();
QVariant data(const QModelIndex &index, int role) const;
void connectToDb();
signals:
public slots:
private:
const static char* COLUMN_NAMES[];
const static char* SQL_SELECT;
QSqlDatabase mydb;
};
#endif // ARTISTSSQLMODEL_H
和main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "artistssqlmodel.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlContext *context = engine.rootContext();
ArtistsSqlModel *artistsSqlModel = new ArtistsSqlModel( qApp);
context->setContextProperty("artistsModel", artistsSqlModel);
engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml")));
return app.exec();
}
好像我的角色名不存在
。您不需要定义QML知道要查找的角色名。你得到这个例子的wiki已经过时了。为模型公开角色名的"新"方法是重新实现QAbstractItemModel::rolenames()方法。将rolennames定义移动到其中:
QHash<int, QByteArray> ArtistsSqlModel::rolenames() const
{
int idx = 0;
QHash<int, QByteArray> roleNames;
while( COLUMN_NAMES[idx]) {
roleNames[Qt::UserRole + idx + 1] = COLUMN_NAMES[idx];
idx++;
}
return roleNames;
}
顺便说一下,我建议你使用新的Qt文档,如果你还没有使用。我认为它比旧的更清晰和有条理。
相关文章:
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- 它不显示数据,只显示永无止境的循环
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- 使用 insertion(<<) 运算符和 "write" 函数在 C++ 中显示数据有什么区别?
- 使用 ARDUINO 和处理在 8x8 LED 矩阵上显示数据时出现问题
- 列表视图最初不显示数据
- C++服务器未显示数据包
- 模板堆栈类:堆栈中没有显示数据
- 使用选择排序对名称进行排序并显示数据
- 'top'程序用于在屏幕上重新显示数据的技术是什么?
- 以两列c++显示数据
- QTableView 显示列标题,但不显示数据
- 显示功能不显示数据
- 从变体VT_ARRAY读取和显示数据 |VT_BSTR
- 线程不刷新数据,在屏幕中显示数据时出错
- 使用C++与3000Hz的线阵扫描相机接口,并处理/显示数据
- QtableWidget不显示数据
- 不按我的要求显示数据输入表单
- 无法在 MySql 数据库中的 C++ QTableView 中显示数据 QSqlQueryModel
- 使用SDI应用程序(MFC)从文本文件读取数据并显示数据