#include "singlecompareroadwidget.h" #include "GlobalVariable.h" #include "ui_singlecompareroadwidget.h" #include "customcombobox.h" #include "spdlog/spdlog.h" #include #include SingleCompareRoadWidget::SingleCompareRoadWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::SingleCompareRoadWidget) , m_nIndex(0) { ui->setupUi(this); /* 设置comboBox阴影 */ // ui->comboBox_soundCardNum->setViewShadowEffect(); /* 通道名称限制10个字 */ ui->lineEditRoadName->setMaxLength(10); connect(ui->btnDel, &QPushButton::clicked, this, [this]{emit deleted(m_nIndex);}); connect(ui->comboBox_soundCardNum, QOverload::of(&CustomComboBox::currentIndexChanged), this, &SingleCompareRoadWidget::do_comboBox_soundCardNum_currentIndexChanged); } SingleCompareRoadWidget::~SingleCompareRoadWidget() { delete ui; } bool SingleCompareRoadWidget::isDelBtnVisible() const { return ui->btnDel->isVisible(); } void SingleCompareRoadWidget::setDelBtnVisible(bool bVisible) { ui->btnDel->setVisible(bVisible); } /* 设置声卡通道列表 */ void SingleCompareRoadWidget::setSoundCardRoadList(const SoundCardPCMInfo_t& soundCard) { m_soundCardInfo = soundCard; bool bShowDesc = SoundCards.isShowSoundCardDesc(); ui->comboBox_soundCardNum->clear(); for(const auto& it : m_soundCardInfo.listPCM) { QString strItem = bShowDesc ? QString::fromStdString(it.strPCMDesc) : QString::fromStdString(it.strPCMName); QString strData = QString::fromStdString(it.strPCMName); ui->comboBox_soundCardNum->addItem(strItem, strData); } /* 默认为空 */ ui->comboBox_soundCardNum->setCurrentIndex(-1); } /* 设置默认参数,设置之前需要先设置完成声卡可选通道列表 */ void SingleCompareRoadWidget::setDefaultParams(const CompareItemRoadInfo_t& roadInfo) { ui->lineEditRoadName->setText(roadInfo.strCompareRoadName); ui->checkBox->setChecked(roadInfo.isEnableRecord); // setIndex(roadInfo.nCompareRoadNum); /* 通道编号不需要设置 */ /* 先清空选择,再设置当前选项 */ // ui->comboBox_soundCardNum->setCurrentIndex(-1); int numIndex = ui->comboBox_soundCardNum->findData(QString::fromStdString(roadInfo.scRoadInfo.pcmInfo.strPCMName)); if(numIndex != -1) { ui->comboBox_soundCardNum->setCurrentIndex(numIndex); } else { ui->comboBox_soundCardNum->setCurrentIndex(-1); // 如果没有找到,默认为空 } // for(int i = 0; i < ui->comboBox_soundCardNum->count(); ++i) // { // SoundCardRoadInfo_t road = ui->comboBox_soundCardNum->itemData(i).value(); // if(road.roadInfo.nRoadNum == roadInfo.scRoadInfo.roadInfo.nRoadNum && // road.nSoundCardNum == roadInfo.scRoadInfo.nSoundCardNum) // { // ui->comboBox_soundCardNum->setCurrentIndex(i); // break; // } // } } int SingleCompareRoadWidget::getIndex() const { return m_nIndex; } void SingleCompareRoadWidget::setIndex(int nIndex) { if(nIndex <= 0) return; m_nIndex = nIndex; QString str = nIndex == 1 ? "主" : QString::number(nIndex); ui->labelRoadName->setText(QString("*%1通道名称:").arg(str)); ui->labelDriverNum->setText(QString("*%1通道声卡设备编号:").arg(str)); ui->checkBox->setText(QString("%1通道开启录音").arg(str)); } /* 获取通道名称 */ QString SingleCompareRoadWidget::getRoadName() const { return ui->lineEditRoadName->text(); } /* 获取声卡录音通道编号 */ OneSoundCardPCMInfo_t SingleCompareRoadWidget::getSoundCardRoadInfo() { std::string strPCMName = ui->comboBox_soundCardNum->currentData().toString().toStdString(); OneSoundCardPCMInfo_t pcmInfo; pcmInfo.strSoundCardName = m_soundCardInfo.strSoundCardName; for(const auto& it : m_soundCardInfo.listPCM) { if(it.strPCMName == strPCMName) { pcmInfo.pcmInfo = it; break; } } return pcmInfo; } /* 获取当前PCM通道名称 */ QString SingleCompareRoadWidget::getCurrentPCMName() const { return ui->comboBox_soundCardNum->currentData().toString(); } /* 是否开启录音 */ bool SingleCompareRoadWidget::isRecordEnabled() const { return ui->checkBox->isChecked(); } /* 设置通道名称报警 */ void SingleCompareRoadWidget::setRoadNameWarn(bool isWarn) { ui->lineEditRoadName->setProperty("Warn", isWarn); ui->lineEditRoadName->style()->unpolish(ui->lineEditRoadName); ui->lineEditRoadName->style()->polish(ui->lineEditRoadName); ui->lineEditRoadName->update(); } /* 设置声卡通道名称报警 */ void SingleCompareRoadWidget::setSoundCardWarn(bool isWarn) { ui->comboBox_soundCardNum->setProperty("Warn", isWarn); ui->comboBox_soundCardNum->style()->unpolish(ui->comboBox_soundCardNum); ui->comboBox_soundCardNum->style()->polish(ui->comboBox_soundCardNum); ui->comboBox_soundCardNum->update(); } /* 设置当前录音通道名称 */ void SingleCompareRoadWidget::clearCurrentSelectRecordName() { ui->comboBox_soundCardNum->setCurrentIndex(-1); } /* 设置样式表 */ void SingleCompareRoadWidget::setQSS(QString strStyle) { this->setStyleSheet(strStyle); ui->comboBox_soundCardNum->setStyleSheet(strStyle); /* 设置下拉框阴影 */ ui->comboBox_soundCardNum->setViewShadowEffect(); // SPDLOG_INFO("ui->comboBox_soundCardNum 样式表: {}", ui->comboBox_soundCardNum->styleSheet().toStdString()); } /* 设置多对比项编辑模式 */ void SingleCompareRoadWidget::setMultiEditMode(bool multiEdit) { if(multiEdit) { return; } /* 设置通道名称和声卡选择框不可编辑 */ ui->lineEditRoadName->setEnabled(false); ui->comboBox_soundCardNum->setEnabled(false); /* 清空声卡选择 */ ui->comboBox_soundCardNum->setCurrentIndex(-1); } /* 选择了一个录音通道 */ void SingleCompareRoadWidget::do_comboBox_soundCardNum_currentIndexChanged(int nIndex) { QString strPCMName = ui->comboBox_soundCardNum->currentData().toString(); // SPDLOG_INFO("选择了一个录音通道: {}", strPCMName.toStdString()); emit signal_selectRecordRoad(strPCMName); }