#include "newdeviceformdialog.h" #include "ui_newdeviceformdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include "frame_define.h" #include "globalparameters.h" #include "kutilities.h" NewDeviceFormDialog::NewDeviceFormDialog(QWidget *parent) : QDialog(parent) , ui(new Ui::NewDeviceFormDialog) { ui->setupUi(this); InitializeUi(); connect(ui->pb_OK, &QPushButton::clicked, this, &NewDeviceFormDialog::onOkClicked); connect(ui->pb_Cancel, &QPushButton::clicked, this, &NewDeviceFormDialog::onCancelClicked); connect(ui->pb_Import, &QPushButton::clicked, this, &NewDeviceFormDialog::browseFile); connect(ui->cb_device, SIGNAL(currentTextChanged(const QString &)),this, SLOT(onComboBoxTextChanged(const QString &))); } NewDeviceFormDialog::~NewDeviceFormDialog() { // 关闭数据库 QSqlDatabase::database().close(); delete ui; } void NewDeviceFormDialog::onOkClicked() { } void NewDeviceFormDialog::onCancelClicked() { } bool NewDeviceFormDialog::openDatabase(const QString &dbName) { // 创建一个 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 设置数据库的文件路径 db.setDatabaseName(dbName); // 尝试打开数据库 if (!db.open()) { // 如果打开失败,输出错误信息 hloge("Error: Failed to open database! %s",db.lastError().text().toStdString().c_str()); return false; } hlogd("Database opened successfully!"); return true; } void NewDeviceFormDialog::browseFile() { //首先断开连接 disconnect(ui->cb_device, SIGNAL(currentTextChanged(const QString &)),this, SLOT(onComboBoxTextChanged(const QString &))); // 打开文件对话框,选择文件路径 QString filePath = QFileDialog::getOpenFileName(this, tr("Select Configuration File"), "", tr("Database Files (*.db);;All Files (*.*)")); // 如果用户选择了文件,更新 QLineEdit 显示路径 if (!filePath.isEmpty()) { ui->lineEdit->setText(filePath); qDebug() << "Selected file path: " << filePath; openDatabase(filePath); QSqlQuery query; vecCfgTab_SmartDeviceType SmartDeviceTypes; // 查询数据 if (!query.exec("SELECT DISTINCT Description FROM CfgTab_SmartDeviceType ORDER BY TypeID ASC")) { hloge("Error: Failed to select data! [%s]",query.lastError().text().toStdString().c_str()); } else { QVector devs; while (query.next()) { QString s = query.value(0).toString(); devs.push_back(s); } foreach (QString device, devs) { QString sql = QString("SELECT * FROM CfgTab_SmartDeviceType where Description = '%1' ORDER BY ProtocolVersion desc LIMIT 1").arg(device); if (!query.exec(sql)) { hloge("Error: Failed to select data! [%s]",query.lastError().text().toStdString().c_str()); } else { // 获取列名到 QSqlRecord QSqlRecord record = query.record(); while (query.next()) { CfgTabSmartDeviceTypeItem smartDeviceTypesItem; smartDeviceTypesItem.TypeID = query.value(record.indexOf("TypeID")).toInt(); smartDeviceTypesItem.Description = query.value(record.indexOf("Description")).toString().toStdString(); smartDeviceTypesItem.ClassType = query.value(record.indexOf("ClassType")).toInt(); smartDeviceTypesItem.PortConfig = query.value(record.indexOf("PortConfig")).toInt(); smartDeviceTypesItem.InterfaceType = query.value(record.indexOf("InterfaceType")).toInt(); smartDeviceTypesItem.StationType = query.value(record.indexOf("StationType")).toInt(); smartDeviceTypesItem.EquipmentCode = query.value(record.indexOf("EquipmentCode")).toInt(); smartDeviceTypesItem.EquipmentModel = query.value(record.indexOf("EquipmentModel")).toString().toStdString(); smartDeviceTypesItem.Manufacturer = query.value(record.indexOf("Manufacturer")).toString().toStdString(); smartDeviceTypesItem.ProtocolVersion = query.value(record.indexOf("ProtocolVersion")).toString().toStdString(); smartDeviceTypesItem.SpecialOption = query.value(record.indexOf("SpecialOption")).toString().toStdString(); smartDeviceTypesItem.Notes = query.value(record.indexOf("Notes")).toString().toStdString(); qDebug() << "Type ID:" << smartDeviceTypesItem.TypeID << ", Description:" << smartDeviceTypesItem.Description.c_str() << ", ProtocolVersion:" << smartDeviceTypesItem.ProtocolVersion.c_str(); SmartDeviceTypes.emplace_back(smartDeviceTypesItem); } } } } //设置串口模式 ui->cb_device->setView(new QListView(this)); QStandardItemModel* model_baund = new QStandardItemModel(this); for (auto it = SmartDeviceTypes.begin(); it != SmartDeviceTypes.end(); it++) { int id = it->TypeID; QString name = QString::fromStdString(it->Description); QString a = QString("%1:%2:%3").arg(id).arg(name).arg(QString::fromStdString(it->ProtocolVersion)); QStandardItem* item = new QStandardItem(a); item->setData(id); model_baund->appendRow(item); } ui->cb_device->setModel(model_baund); ui->cb_device->setCurrentIndex(2); } //重新连接槽函数 connect(ui->cb_device, SIGNAL(currentTextChanged(const QString &)),this, SLOT(onComboBoxTextChanged(const QString &))); } void NewDeviceFormDialog::onComboBoxTextChanged(const QString &text) { qDebug() << "ComboBox text changed to" << text; } void NewDeviceFormDialog::InitializeUi() { ui->slave_id->setText("1"); //设置奇偶校验 ui->cb_parity->setView(new QListView(this)); QStandardItemModel* model_parity = new QStandardItemModel(this); vecParityItemData vparity; vparity.push_back(std::make_pair(EMS_PARITY_NONE,tr("None"))); vparity.push_back(std::make_pair(EMS_PARITY_ODD,tr("Odd"))); vparity.push_back(std::make_pair(EMS_PARITY_EVEN,tr("Even"))); for (auto it = vparity.begin(); it != vparity.end(); it++) { int id = it->first; QString name = it->second; QStandardItem* item = new QStandardItem(name); //QVariant var = QVariant::fromValue(data); item->setData(id); model_parity->appendRow(item); } ui->cb_parity->setModel(model_parity); //设置数据位 ui->cb_data->setView(new QListView(this)); QStandardItemModel* model_databits = new QStandardItemModel(this); vecDataBitsItemData vdatabits; vdatabits.push_back(std::make_pair(EMS_DATA_8_BITS,tr("8 Data bits"))); vdatabits.push_back(std::make_pair(EMS_DATA_7_BITS,tr("7 Data bits"))); for (auto it = vdatabits.begin(); it != vdatabits.end(); it++) { int id = it->first; QString name = it->second; QStandardItem* item = new QStandardItem(name); item->setData(id); model_databits->appendRow(item); } ui->cb_data->setModel(model_databits); //设置数据位 ui->cb_stop->setView(new QListView(this)); QStandardItemModel* model_stopbits = new QStandardItemModel(this); vecDataBitsItemData vstopbits; vstopbits.push_back(std::make_pair(EMS_1_STOP_BITS,tr("1 Stop bit"))); vstopbits.push_back(std::make_pair(EMS_2_STOP_BITS,tr("2 Stop bits"))); for (auto it = vstopbits.begin(); it != vstopbits.end(); it++) { int id = it->first; QString name = it->second; QStandardItem* item = new QStandardItem(name); item->setData(id); model_stopbits->appendRow(item); } ui->cb_stop->setModel(model_stopbits); //设置串口模式 ui->cb_baund->setView(new QListView(this)); QStandardItemModel* model_baund = new QStandardItemModel(this); vecBaundItemData vbaund; vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("2400"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("4800"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("9600"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("19200"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("38400"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("57600"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("115200"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("128000"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("153600"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("230400"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("460800"))); vbaund.push_back(std::make_pair(EMS_BAUND_2400,tr("921600"))); for (auto it = vbaund.begin(); it != vbaund.end(); it++) { int id = it->first; QString name = it->second; QStandardItem* item = new QStandardItem(name); item->setData(id); model_baund->appendRow(item); } ui->cb_baund->setModel(model_baund); ui->cb_baund->setCurrentIndex(2); //设置串口类型 ui->cb_type->setView(new QListView(this)); QStandardItemModel* model_type = new QStandardItemModel(this); vecPortTypeItemData vporttype; vporttype.push_back(std::make_pair(EMS_SERIALPORT_TYPE,tr("Serial Port"))); for (auto it = vporttype.begin(); it != vporttype.end(); it++) { int id = it->first; QString name = it->second; QStandardItem* item = new QStandardItem(name); item->setData(id); model_type->appendRow(item); } ui->cb_type->setModel(model_type); //设置串口号 ui->cb_serialport->setView(new QListView(this)); QStandardItemModel* model_serialport = new QStandardItemModel(this); for (int i=0; i < AppData::getInstance()->SerialPortCount ; i++) { QString name = AppData::getInstance()->SerialPortPrefix + QString("%1").arg(i); QStandardItem* item = new QStandardItem(name); //QVariant var = QVariant::fromValue(data); item->setData(name); model_serialport->appendRow(item); } ui->cb_serialport->setModel(model_serialport); }