Qt ModelView显示数据库数据
利用qt的model view来显示数据表userudps里的数据
用了一个label 两个combox和一个tableview,实现如下效果:
我这里用到是mysql数据库,一般配置mysql数据库就两种有驱动或者没驱动,有的话把mysql的bin目录的libmysql.dll复制到qt编译器的bin目录下,没有的话还得装qt的源码,然后编译出mysql的驱动再把mysql的bin目录的libmysql.dll复制到qt编译器的bin目录下。
main.cpp 我这里用了日志显示一些错误信息
#include "widget.h"
#include <QDebug>
#include <QApplication>
#include <QFile>
#include <QTextStream>
#include <QDateTime>void logMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{// 获取当前时间和日期QDateTime currentDateTime = QDateTime::currentDateTime();// 打开日志文件(追加模式)QFile file("log.txt");if (!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {qDebug() << "Failed to open log file.";return;}// 创建文本流,并写入日志信息QTextStream stream(&file);switch (type) {case QtDebugMsg:qDebug().noquote() << msg; // 输出到控制台stream << "[" << currentDateTime.toString("yyyy-MM-dd hh:mm:ss") << "] [DEBUG] ";break;case QtInfoMsg:qInfo().noquote() << msg; // 输出到控制台stream << "[" << currentDateTime.toString("yyyy-MM-dd hh:mm:ss") << "] [INFO] ";break;case QtWarningMsg:qWarning().noquote() << msg; // 输出到控制台stream << "[" << currentDateTime.toString("yyyy-MM-dd hh:mm:ss") << "] [WARNING] ";break;case QtCriticalMsg:qCritical().noquote() << msg; // 输出到控制台stream << "[" << currentDateTime.toString("yyyy-MM-dd hh:mm:ss") << "] [CRITICAL] ";break;case QtFatalMsg:qFatal("%s", msg.toUtf8().constData());break;default:break;}stream << msg << "\n";// 关闭日志文件file.close();
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);qInstallMessageHandler(logMessage);Widget w;w.show();return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);qsqmtableModel=new QSqlQueryModel(this);qsqmcomboxModel=new QSqlQueryModel(this);qsqmcombox2Model=new QSqlQueryModel(this);QSqlDatabase qsdSqlData=QSqlDatabase::addDatabase("QMYSQL");qsdSqlData.setHostName("127.0.0.1"); //数据库服务器IPqsdSqlData.setUserName("root"); //数据库用户名qsdSqlData.setPassword("123456"); //密码qsdSqlData.setDatabaseName("test"); //使用哪个数据库if (qsdSqlData.open() == false) {qDebug()<<"数据库连接失败";return;}else{qDebug()<<"数据库连接成功";}QString sqlselect="select* from userudps";qsqmtableModel->setQuery(sqlselect);ui->tableView->setModel(qsqmtableModel);sqlselect="select user_send from userudps group by user_send";qsqmcomboxModel->setQuery(sqlselect);ui->comboBoxrow->setModel(qsqmcomboxModel);ui->comboBoxrow->setCurrentIndex(0);}Widget::~Widget()
{delete ui;
}void Widget::on_comboBoxrow_currentIndexChanged(const QString &arg1)
{QString sql=QString("select user_recv from userudps where user_send='%1'").arg(arg1);qsqmcombox2Model->setQuery(sql);ui->comboBoxcol->setModel(qsqmcombox2Model);ui->comboBoxcol->setCurrentIndex(0);
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlQueryModel>
#include <QSqlDatabase>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
private slots:void on_comboBoxrow_currentIndexChanged(const QString &arg1);private:Ui::Widget *ui;QSqlQueryModel* qsqmtableModel=nullptr;QSqlQueryModel* qsqmcomboxModel=nullptr;QSqlQueryModel* qsqmcombox2Model=nullptr;
};
#endif // WIDGET_H