- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有一个类FilmModel继承自QSqlTableModel和QTableView。我设置模型
model = new FilmModel(this);
ui->filmList->setModel(model);
然后在 QTableView slot doubleClicked(QModelIndex index) 中尝试获取记录。
QSqlRecord rr = model->record(index.row());
qDebug() << rr;
我得到空值。它正确地写入日志列名称,但每个值都是“”。我究竟做错了什么?也许在此处编写 CREATE TABLE 请求会很有用:
query.exec("CREATE TABLE IF NOT EXISTS films ("
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR, "
"year SMALLINT UNSIGNED, "
"country VARCHAR, "
"director VARCHAR, "
"actor VARCHAR, "
"type TINYINT UNSIGNED, "
"genre INT UNSIGNED, "
"score TINYINT UNSIGNED, "
"poster LONGBLOB)");
RDBMS 是 SQLite。
最佳答案
我又修改了一点answer .这是我的代码并且有效:
//pro file:
QT += core gui sql
TARGET = test1
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp \
database.cpp
HEADERS += widget.h \
database.h
FORMS += widget.ui
//database.h:
#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
class Database
{
public:
Database();
~Database();
QSqlDatabase db;
bool connection();
void createTables();
};
#endif // DATABASE_H
//database.cpp:
#include "database.h"
#include <QtGui>
#include <QSqlQuery>
Database::Database()
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
}
Database::~Database()
{
db.close();
}
bool Database::connection()
{
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Ok);
return false;
}
return true;
}
void Database::createTables()
{
QSqlQuery q;
q.exec("CREATE TABLE test(id integer primary key,name varchar(20))");
q.exec("INSERT INTO test(name) VALUES('foo')");
q.exec("INSERT INTO test(name) VALUES('fie')");
q.exec("INSERT INTO test(name) VALUES('bar')");
}
//widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QModelIndex>
class QSqlQueryModel;
class Database;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void slotTest(QModelIndex idx);
private:
QSqlQueryModel *model;
Database *m_db;
Ui::Widget *ui;
};
#endif
//widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include "database.h"
#include <QSqlQueryModel>
#include <QSqlRecord>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_db = new Database();
m_db->connection();
m_db->createTables();
model = new QSqlQueryModel();
model->setQuery("SELECT * from test");
ui->tableView->setModel(model);
connect(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(slotTest(QModelIndex)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::slotTest(QModelIndex idx)
{
QSqlRecord r;
if(idx.isValid())
{
r = model->record(idx.row());
qDebug() << r;
}
}
//widget.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>274</width>
<height>210</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableView" name="tableView"/>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
//main.cpp:
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
关于c++ - 从 QSqlTableModel::record() 返回的 QSqlRecord 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127214/
我在将新的 QSqlRecord 插入 Postgresql 数据库时遇到问题。目标表定义如下: create table samochod( samochod_id integer primar
当我能够以某种方式轻松获取 QSqlRecord 中存在的所有字段和值时,调试数据库操作会更容易。 最佳答案 我花了很长时间才从 Qt 文档中弄清楚如何做到这一点,尽管最终它相当简单。 // QSql
我正在 Qt 中开发一个小型应用程序,我将 SQL 库与 SQLite 一起用作数据库。到目前为止,效果很好。 QSqlQuery 类只提供了一种通过索引而不是字段名获取列值的方法。但是,使用 rec
有一个类FilmModel继承自QSqlTableModel和QTableView。我设置模型 model = new FilmModel(this); ui->filmList->setModel(
我遇到的问题与我见过的一些问题类似,但解决方案似乎不适合我,所以我将添加一个新问题: 我正在尝试使用以下查询将 SQLite 表中的数值(最高用户 ID)访问到我的 QT 程序中: SELECT Na
我是一名优秀的程序员,十分优秀!