利用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"); //数据库服务器IP
qsdSqlData.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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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