c++ qt Mysql 使用QDataWidgetMapper 绑定程序界面中的控件
时间: 2024-05-04 17:22:08 浏览: 201
使用QDataWidgetMapper可以方便地将数据模型中的数据绑定到界面上。
首先,你需要在Qt中连接到MySQL数据库。这可以使用QSqlDatabase和QSqlQuery来完成。例如:
```c++
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydatabase");
db.setUserName("myusername");
db.setPassword("mypassword");
if (!db.open()) {
qDebug() << "Failed to connect to database";
return;
}
```
接下来,你需要定义一个QSqlTableModel作为数据模型,用于从数据库中读取数据。例如:
```c++
QSqlTableModel *model = new QSqlTableModel(this, db);
model->setTable("mytable");
model->select();
```
然后,你需要将QDataWidgetMapper绑定到控件和数据模型上。例如:
```c++
QDataWidgetMapper *mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->addMapping(ui->lineEditName, 1); // 第二列的数据绑定到lineEditName控件
mapper->addMapping(ui->lineEditAge, 2); // 第三列的数据绑定到lineEditAge控件
```
最后,你需要设置当前记录的索引,以便QDataWidgetMapper可以将数据从模型中读取到控件中。例如:
```c++
mapper->setCurrentIndex(0); // 显示第一条记录
```
这样,当你调用setCurrentIndex函数时,QDataWidgetMapper将自动将当前记录中的数据绑定到相应的控件上。
需要注意的是,如果你想实现对记录的修改,你需要在QSqlTableModel上调用submitAll()函数来提交更改。例如:
```c++
model->setData(model->index(mapper->currentIndex(), 1), ui->lineEditName->text());
model->setData(model->index(mapper->currentIndex(), 2), ui->lineEditAge->text());
model->submitAll();
```
这将把lineEditName和lineEditAge控件中的值保存到模型中。
阅读全文