连接mysql,在.pro文件加入
QT +=sql
连接:
QSqlDatabase database=QSqlDatabase::addDatabase("QMYSQL");
database.setHostName("localhost");
database.setPort(3306);
database.setUserName("root");
database.setPassword("123456");
//database.setDatabaseName("lab");如果不创建数据库的话,可以在此选择数据库
if(!database.open())
{
qDebug()<<"fail to connect mysql:"<<database.lastError().text();
}
解决连接问题:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7,很成功的解决了
创建数据库和数据表
QString querystring;
//创建数据库
querystring = "CREATE DATABASE IF NOT EXISTS enman";
database.exec(querystring); //2.进行数据库创建
if (database.lastError().isValid())
{
qDebug()<<"Create database failed."<<database.lastError();
}
//创建数据表student,首先要use 数据库名
database.setDatabaseName("enman");
if(!database.open())
{
qDebug()<<"database open failed";
}
querystring = //其实是mysql的命令语句,通过消息循环执行
"CREATE TABLE IF NOT EXISTS student_info.Student\
(\
Name varchar(20),\
NO varchar(20) primary key,\
Sex varchar(20),\
Tell varchar(20),\
Address varchar(30), \
Hobbies varchar(30)\
)";
database.exec(querystring);//执行创建数据表语句
if (database.lastError().isValid())
{
qDebug()<<"Student table creat failed:" << database.lastError();
return;
}
//支持中文
database.exec("alter table Student convert to character set utf8");
}
添加原始值
//初始化数据库(添加原始值)
void MainWindow::initDB()
{
QSqlQuery query(database);
query.exec("insert into Student values('张三', '2018010235', '男','12116588966','北京市朝阳区幸福小区12#103','篮球,游泳')");
query.exec("insert into Student values('李四', '2018020156', '男','15665487200','湖南省长沙市岳麓区开心小区9#602','足球')");
query.exec("insert into Student values('灵儿', '2018020202', '女','10202020202','江苏省南京市玄武区爱情公寓2#202','Dota')");
if(!query.exec())
{
qDebug() << "Error: Fail to insert ." << query.lastError();
}
通过点击按钮触发mysql查询,然后显示在QTableWight上。
首先在ui界面里加入QTableWight,然后再加一个按钮,右击转到槽,编辑clicked函数
void MainWindow::on_pushButton_clicked(){
QSqlQueryModel* mode= new QSqlQueryModel(ui->tableView);
QString query = "select* from enman";
mode->setQuery(query);
mode->setHeaderData(0,Qt::Horizontal,tr("word"));
mode->setHeaderData(1,Qt::Horizontal,tr("词性"));
mode->setHeaderData(2,Qt::Horizontal,tr("meaning"));
mode->setHeaderData(3,Qt::Horizontal,tr("first"));
ui->tableView->setModel(mode);
}
然后点击按钮就可以实现Qtablewight显示mysql数据了,然而这无法筛选,所以需要我们的组合能力来实现它。
下面我们将combobox的输入作为检索依据
//槽函数连接
connect(ui->comboBox,SIGNAL(currentTextChanged(QString)),this,SLOT(tableview()));
//在.h文件里声明的
private slots:
QString tableview();
private:
QString q;
//写一个槽函数
QString MainWindow::tableview(){
qDebug() << ui->comboBox->currentText();
q = ui->comboBox->currentText();
qDebug() << q;
return q;
}