qt5.5使用QSQLTE,使用QSqlTableModel查询数据库,一旦执行让tableview中显示数据库数据的语句ui->tableView->setModel(model),
运行就提示已停止工作,求解。
ui界面只有一个tableview。
工程文件结构如图:
代码如下:
1.widget.cpp中
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
model = new QSqlTableModel(this);
model->setTable("student");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
ui->tableView->setModel(model);
/*QTableView *view = new QTableView;
view->setModel(model);
view->show();*/
//ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
2.main.cpp
#include "widget.h"
#include <QApplication>
#include "database.h"
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
if(!createConnetion())
return 1;
Widget w;
w.show();
return a.exec();
}
3.database.h中
#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QObject>
static bool createConnetion()
{
QSqlDatabase db= QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
if(!db.open()) return false;
QSqlQuery query;
query.exec(QObject::tr("create table student (id int primary key,name vchar)"));
query.exec(QObject::tr("insert into student values (0,'fece0')"));
query.exec(QObject::tr("insert into student values (1,'fece1')"));
query.exec(QObject::tr("insert into student values (2,'fece2')"));
return true;
}
#endif // DATABASE_H
4.widget.h中
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlTableModel>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QSqlTableModel *model;
};
#endif // WIDGET_H