使用的是QSqlQueryModel这个类,结合QTableView来显示。在链接数据库后,根据表名,自动去查询和显示表数据。

 

一、链接数据库

db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(host);
    db.setUserName(username);
    db.setPassword(pwd);
    db.setDatabaseName(db_name);
    db.setConnectOptions("MYSQL_OPT_RECONNECT=1");

二、查询数据库表,获取表数据

void MysqlSettingDialog::on_pushButton_find_clicked()//查询 
{
	DataOperator *sql = DataOperator::getInstance(); //链接的数据库
	if (sql->isOpen())
	{
	    QSqlQueryModel *m_model = new QSqlQueryModel(ui->tableView);
		int index = ui->comboBox->currentIndex();

		QString table_name = "";
		switch (index) //根据不同的选择,查询不同的表
		{
		case 0:table_name = "users"; break;
		case 1:table_name = "tools"; break;
		case 2:table_name = "tooldefaultparam"; break;
		case 3:table_name = "temperature"; break;
		case 4:table_name = "coefficient"; break;
		case 5:table_name = "latestcoefficient"; break;
		case 6:table_name = "products"; break;
		default:break;
		};
		m_model->clear();

		QVariantList list;//获取表的列名
		QString cmd = QString("SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_name = '%1';  ").arg(table_name);
		if (sql->execute(cmd))
		{
			foreach(QSqlRecord record, sql->getLastQueryResult())
			{
				list << record.value(record.indexOf("COLUMN_NAME"));
			}
		}
        //查询表数据
		m_model->setQuery(QString("SELECT * FROM %1").arg(table_name));

        //把数据和列名对应上
		for (int i = 0; i < list.size(); i++)
		{
			m_model->setHeaderData(i, Qt::Horizontal, list.at(i));
		}
		ui->tableView->setModel(m_model);//数据放置进去  

		ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//根据内容自动调整宽度
	}
	else
	{
		QMessageBox::warning(this, QStringLiteral("错误"), QStringLiteral("未连接,请检查."));
	}
}

效果图如下:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐