数据库做为数据源,在不少组态软件中使用很是多,指定数据库类型,填写好数据库链接信息,指定对应的数据库表和字段,采集间隔,程序按照采集间隔自动采集数据库数据,绑定到界面上的控件赋值显示便可。使用数据库做为数据源,有个很是大的好处就是不用去写额外的通讯代码,也与对方的什么语言什么平台无关,不会有扯皮的事情发生,例如通讯协议不规范不许确致使解析不对的状况啊,这样就支持任意的语言和平台啦,毕竟有数据库这个中间载体过渡,并且任何语言任何平台都会有数据库,都兼容,因此采用数据库做为数据源不失为一种很好的方案,能够专一于软件功能的持续集成。mysql
体验地址:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 提取码:877p 文件:可执行文件.ziplinux
void frmData::initServer() { //实例化串口类,绑定信号槽 com = new QextSerialPort(QextSerialPort::EventDriven, this); connect(com, SIGNAL(readyRead()), this, SLOT(readDataCom())); //实例化网络通讯客户端类,绑定信号槽 tcpClient = new QTcpSocket(this); connect(tcpClient, SIGNAL(readyRead()), this, SLOT(readDataClient())); //实例化网络通讯服务端类,绑定信号槽 tcpSocket = NULL; tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection())); //开启定时器读取数据库采集数据 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(readDataDb())); timer->setInterval(1000); } void frmData::on_btnOpenDb_clicked() { if (ui->btnOpenDb->text() == "打开") { if (App::DbType == "sqlite") { //先检查数据库文件是否存在 QString dbPath = qApp->applicationDirPath() + "/" + App::DbPath; QFile file(dbPath); if (file.size() == 0) { return; } dbConn = QSqlDatabase::addDatabase("QSQLITE"); dbConn.setDatabaseName(dbPath); } else if (App::DbType == "mysql") { //先检查数据库服务器IP是否通,不检查直接链接,不存在的IP会卡好久 QTcpSocket socket; socket.connectToHost(App::DbPath, App::DbPort); if (!socket.waitForConnected(2000)) { return; } else { socket.disconnectFromHost(); } dbConn = QSqlDatabase::addDatabase("QMYSQL"); dbConn.setHostName(App::DbPath); dbConn.setPort(App::DbPort); dbConn.setDatabaseName(App::DbName); dbConn.setUserName(App::DbUser); dbConn.setPassword(App::DbPwd); } else { //暂未支持其余数据库,能够自行加入 return; } bool ok = dbConn.open(); if (ok) { setEnable(ui->btnOpenDb, false); ui->btnOpenDb->setText("关闭"); timer->start(); } } else { if (dbConn.isOpen()) { dbConn.close(); } setEnable(ui->btnOpenDb, true); ui->btnOpenDb->setText("打开"); timer->stop(); } } void frmData::readDataDb() { QString sql = QString("select %1 from %2").arg(App::DbColumn).arg(App::DbTable); QSqlQuery query; if (query.exec(sql)) { if (query.next()) { double value = query.value(0).toDouble(); ui->txtValue->setText(QString::number(value)); append(4, QString("当前值: %1").arg(value)); } } }