我们的数据库课程设计选题是大学生二手市场管理系统。运用数据库知识建立好表之后,就想使用qt把它实现出来,这里写下遇到的困难和解决办法。
- 连接数据库
1:首先在pro文件中加入
QT += core sql widgets gui
2:然后是建立连接
bool SqlOp::CreateConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "connection1");
db.setDatabaseName("test"); //这是我在mysql中建立的数据库的名字 使用时应该替换成自己的
db.setUserName("root");
//dataBase.setHostName("localhost"); //这句 在我这个程序中并不需要,但是之前测试的时候,不写会报错,名称必须是localhost
if (db.open())
{
qDebug() << "CreateConnection:" << "connect success";
return true;
}
else
{
qDebug() << db.lastError().text();
return false;
}
}
3:这时他会报那个driver not loaded的错误
解决办法:
将MYSQL安装目录下的libmysql.dll复制到Qt安装目录下的bin目录下即可。
4:查询还是查不出来
解决办法:
QSqlQuery query(GetDatabase()); // GetDatabase() 返回的就是上文中的test.db
这时就把查询语句和数据库连接在一起了,查询就可以成功了。
- tableview 的使用
1:返回选中单元格中的内容
connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(getProductCode(QModelIndex)));
void Tab1::getProductCode(QModelIndex Index)
{
code = Index.data().toString();
}
2:获取指定单元格中的内容
QModelIndex index = model->index(row, column, QModelIndex()); //coulumn row 需要自己输入整型数值
SID = index.data().toString();
3:去掉行号 如图:
QHeaderView* headerView = ui.tableView->verticalHeader();
headerView->setHidden(true);
4:单元格长度平分tableview
ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
5:modle 配合tableview查询
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery(str, SqlOp::GetDatabase()); // str 是QString类型的查询语句
model->setHeaderData(0, Qt::Horizontal, "商品号"); //设置表头
model->setHeaderData(1, Qt::Horizontal, "商品名");
model->setHeaderData(2, Qt::Horizontal, "商品价格");
model->setHeaderData(3, Qt::Horizontal, "商品描述");
ui.tableView->setModel(model);
最后:大学生二手市场管理系统具体代码
https://github.com/RedHaohao/Secondary-market-management-System/tree/master