From a9b29230e8fc96d724ac851a175bb27a68c29d54 Mon Sep 17 00:00:00 2001 From: Gangphon Date: Fri, 15 Sep 2023 10:59:00 +0800 Subject: [PATCH] ledset --- ledset/expertscreenconnwin.cpp | 57 +- ledset/expertscreenconnwin.h | 15 +- ledset/expertsmartpointsetwin.cpp | 32 +- ledset/expertwin.cpp | 779 ++++++++++---------------- ledset/expertwin.h | 52 +- ledset/globalfunc.cpp | 152 +++++ ledset/globalfunc.h | 7 +- ledset/gutil/cu.h | 11 + ledset/ic_ui/doublelatcheffectwin.cpp | 297 ++++++++++ ledset/ic_ui/doublelatcheffectwin.h | 25 + ledset/ic_ui/icn2053.cpp | 584 +++++++++++++++++++ ledset/ic_ui/icn2053.h | 24 + ledset/ic_ui/normaleffectwin.cpp | 293 ++++++++++ ledset/ic_ui/normaleffectwin.h | 26 + ledset/ic_ui/pwmeffectwin.cpp | 321 +++++++++++ ledset/ic_ui/pwmeffectwin.h | 26 + ledset/imgs/cascade.png | Bin 0 -> 9389 bytes ledset/imgs/mainsend.png | Bin 0 -> 4759 bytes ledset/imgs/rcv.png | Bin 0 -> 8892 bytes ledset/ledset.pro | 8 + ledset/res.qrc | 3 + 21 files changed, 2159 insertions(+), 553 deletions(-) create mode 100644 ledset/ic_ui/doublelatcheffectwin.cpp create mode 100644 ledset/ic_ui/doublelatcheffectwin.h create mode 100644 ledset/ic_ui/icn2053.cpp create mode 100644 ledset/ic_ui/icn2053.h create mode 100644 ledset/ic_ui/normaleffectwin.cpp create mode 100644 ledset/ic_ui/normaleffectwin.h create mode 100644 ledset/ic_ui/pwmeffectwin.cpp create mode 100644 ledset/ic_ui/pwmeffectwin.h create mode 100644 ledset/imgs/cascade.png create mode 100644 ledset/imgs/mainsend.png create mode 100644 ledset/imgs/rcv.png diff --git a/ledset/expertscreenconnwin.cpp b/ledset/expertscreenconnwin.cpp index 47486c2..46b49f4 100644 --- a/ledset/expertscreenconnwin.cpp +++ b/ledset/expertscreenconnwin.cpp @@ -48,18 +48,15 @@ ExpertScreenConnWin::ExpertScreenConnWin(QWidget *parent) : QSplitter{parent} { lb = new QLabel(tr("卡列数: ")); hh->addWidget(lb); - auto fdCardColNum = new QSpinBox; + fdCardColNum = new QSpinBox; fdCardColNum->setRange(0, 9999); fdCardColNum->setValue(2); -// connect(fdCardColNum, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) { -// table->setColumnCount(value); -// }); hh->addWidget(fdCardColNum); lb = new QLabel(tr("卡行数: ")); hh->addWidget(lb); - auto fdCardRowNum = new QSpinBox; + fdCardRowNum = new QSpinBox; fdCardRowNum->setRange(0, 9999); fdCardRowNum->setValue(2); hh->addWidget(fdCardRowNum); @@ -172,13 +169,18 @@ ExpertScreenConnWin::ExpertScreenConnWin(QWidget *parent) : QSplitter{parent} { table = new CardTable(fdCardRowNum->value(), fdCardColNum->value()); table->win = this; table->setEditTriggers(QAbstractItemView::NoEditTriggers); - table->horizontalHeader()->setDefaultSectionSize(90); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); - table->verticalHeader()->setDefaultSectionSize(90); - table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); - table->verticalHeader()->setMinimumWidth(30); table->setSelectionMode(QTableWidget::NoSelection); - connect(table, &QTableWidget::currentCellChanged, this, &ExpertScreenConnWin::conn); + table->setColWidth(90)->setColResize(QHeaderView::Fixed)->setRowHeight(90)->setRowResize(QHeaderView::Fixed); + table->verticalHeader()->setMinimumWidth(30); + connect(table, &QTableWidget::currentCellChanged, this, [=](int row, int column) { + if(row < 0) return; + auto item = table->item(row, column); + if(item) return; + auto netIdx = fdNet->checkedId(); + netss[netIdx].emplace_back(QPoint(column, row)); + updCell(row, column, netIdx); + table->update(); + }); connect(fdCardColNum, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, table, &QTableWidget::setColumnCount); connect(fdCardRowNum, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, table, &QTableWidget::setRowCount); addWidget(table); @@ -188,20 +190,12 @@ ExpertScreenConnWin::ExpertScreenConnWin(QWidget *parent) : QSplitter{parent} { setSizes({280, 1}); } -void ExpertScreenConnWin::conn(int row, int column) { - if(row < 0) return; - auto item = table->item(row, column); - if(item) return; - auto netIdx = fdNet->checkedId(); - netss[netIdx].emplace_back(QPoint(column, row)); - item = new QTableWidgetItem("网口: "+QString::number(netIdx+1)+"\n"+tr("接收卡: ")+QString::number(netss[netIdx].size())+"\n"+tr("宽度: ")+QString::number(fdCardWidth->value())+"\n高度: "+QString::number(fdCardHeight->value())); +void ExpertScreenConnWin::updCell(int row, int column, int netIdx) { + auto item = table->setText(row, column, "网口: "+QString::number(netIdx+1)+"\n"+tr("接收卡: ")+QString::number(netss[netIdx].size())+"\n"+tr("宽度: ")+QString::number(fdCardWidth->value())+"\n高度: "+QString::number(fdCardHeight->value()), netIdx); auto color = cardColors[netIdx % (sizeof(cardColors)/sizeof(cardColors[0]))]; - item->setForeground(QColor(255,255,255)); color.setAlpha(100); item->setBackground(color); - item->setData(Qt::UserRole, netIdx); - table->setItem(row, column, item); - table->update(); + item->setForeground(QColor(255,255,255)); } void ExpertScreenConnWin::connBack() { auto netIdx = fdNet->checkedId(); @@ -264,3 +258,22 @@ void CardTable::DrawLineWithArrow(QPainter& painter, QPen pen, QPoint start, QPo painter.drawLine(line); painter.drawPolygon(arrowHead); } +//added by alahover 20230903 -s +//根据JObj初始化重绘表格 +void::ExpertScreenConnWin::InitByJObj(const JObj &obj) { + auto boxList = obj["boxList"].toArray(); + qDebug()<<"由JObj初始化表格"<setValue(boxList[0]["ScreenCol"].toInt()); + fdCardRowNum->setValue(boxList[0]["ScreenRow"].toInt()); + fdCardWidth->setValue(boxList[0]["ModuleWidth"].toInt()); + fdCardHeight->setValue(boxList[0]["ModuleHeight"].toInt()); + for(auto &box : boxList) { + auto PortId = box["PortId"].toInt(); + auto ScreenPosCol = box["ScreenPosCol"].toInt(); + auto ScreenPosRow = box["ScreenPosRow"].toInt(); + netss[PortId].emplace_back(QPoint{ScreenPosCol, ScreenPosRow}); + updCell(ScreenPosRow, ScreenPosCol, PortId); + } +} +//added by alahover 20230903 -o diff --git a/ledset/expertscreenconnwin.h b/ledset/expertscreenconnwin.h index 2ff6b0b..fe1fd8f 100644 --- a/ledset/expertscreenconnwin.h +++ b/ledset/expertscreenconnwin.h @@ -1,8 +1,9 @@ #ifndef EXPERTSCREENCONNWIN_H #define EXPERTSCREENCONNWIN_H +#include "gutil/qjson.h" +#include "gutil/qgui.h" #include -#include #include #include @@ -11,19 +12,19 @@ class ExpertScreenConnWin : public QSplitter { Q_OBJECT public: explicit ExpertScreenConnWin(QWidget *parent = nullptr); - void conn(int row, int column); + void updCell(int row, int column, int); void connBack(); QButtonGroup *fdNet; - QSpinBox *fdCardWidth; - QSpinBox *fdCardHeight; + QSpinBox *fdCardColNum, *fdCardRowNum, *fdCardWidth, *fdCardHeight; CardTable *table; std::vector netss[4]{}; + + void InitByJObj(const JObj &obj); }; -class CardTable : public QTableWidget { +class CardTable : public Table { public: - explicit CardTable(QWidget *parent = nullptr) : QTableWidget{parent} {} - CardTable(int rows, int columns, QWidget *parent = nullptr) : QTableWidget{rows, columns, parent} {} + using Table::Table; ExpertScreenConnWin *win; private: void DrawLineWithArrow(QPainter& painter, QPen pen, QPoint start, QPoint end); diff --git a/ledset/expertsmartpointsetwin.cpp b/ledset/expertsmartpointsetwin.cpp index a202146..f4de193 100644 --- a/ledset/expertsmartpointsetwin.cpp +++ b/ledset/expertsmartpointsetwin.cpp @@ -815,12 +815,14 @@ ExpertSmartPointSetWin::ExpertSmartPointSetWin(ExpertWin *expertWin) : BaseWin{e check = (quint32_be*)(msg.data()+headMap.end+modMap.end); *check = crc32_calc((byte*)msg.data()+headMap.body, modMap.end+6); res12 = *(quint32_be*)(unitptr+modUnitMap.smartsetRes); - - auto waitingDlg = new WaitingDlg(this, tr("Setting")+" ..."); - auto res = sendMsgSync(msg, 0x1EA, 10000, waitingDlg); - if(res.code==5) {QMessageBox::critical(this, "Error", tr("请求超时")); return;} - else if(res.code) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} - waitingDlg->close(); + if(expertWin->m_iRcvCardType!=enum_zrf)//added by alahover 20230904 + { + auto waitingDlg = new WaitingDlg(this, tr("Setting")+" ..."); + auto res = sendMsgSync(msg, 0x1EA, 10000, waitingDlg); + if(res.code==5) {QMessageBox::critical(this, "Error", tr("请求超时")); return;} + else if(res.code) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} + waitingDlg->close(); + } } else if(idx==1) { DataPolarity = fdDataPolarity->checkedId(); res12 &= ~(1u<<31); @@ -898,12 +900,17 @@ int ExpertSmartPointSetWin::send(uint ptr, const std::initializer_list &da check = (quint32_be*)(msg.data()+msg.size()-4); *check = crc32_calc((byte*)msg.data()+headMap.body, msg.size()-4-headMap.body); - auto waitingDlg = new WaitingDlg(this, tr("Setting")+" ..."); - auto res = sendMsgSync(msg, 0x1EA, 10000, waitingDlg); - if(res.code==5) QMessageBox::critical(this, "Error", tr("请求超时")); - else if(res.code) QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); - else waitingDlg->close(); - return res.code; + if(expertWin->m_iRcvCardType!=enum_zrf)//added by alahover 20230904 + { + auto waitingDlg = new WaitingDlg(this, tr("Setting")+" ..."); + auto res = sendMsgSync(msg, 0x1EA, 10000, waitingDlg); + if(res.code==5) QMessageBox::critical(this, "Error", tr("请求超时")); + else if(res.code) QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); + else waitingDlg->close(); + return res.code; + } + else + return 0; } void ExpertSmartPointSetWin::save() { @@ -974,6 +981,7 @@ void ExpertSmartPointSetWin::save() { expertWin->fdGroupNum->setText(QString::number(GroupNum)); expertWin->fdScanNum->setText(QString::number(ScanNum)); expertWin->fdChipType->setText(ChipType); + expertWin->m_effectStack->setCurrentIndex(GetIcTypeFromName(ChipType)); expertWin->fdDecodeMode->setText(DecodeMode); QString strLine1,strLine2,strLine3,strLine4; diff --git a/ledset/expertwin.cpp b/ledset/expertwin.cpp index b213d4b..72b9e99 100644 --- a/ledset/expertwin.cpp +++ b/ledset/expertwin.cpp @@ -17,9 +17,12 @@ #include #include #include -#include "efffrefr.h" -#include "globalfunc.h" - +#include "ic_ui/normaleffectwin.h" +#include "ic_ui/pwmeffectwin.h" +#include "ic_ui/doublelatcheffectwin.h" +NormalEffectWin *normalPanel ; +PwmEffectWin *pwmPanel ; +DoubleLatchEffectWin *doublelatchPanel ; auto zrf_param_msg = QByteArray::fromHex( "20 00 06 20 10 10 00 E4 06 FF FF FF FF 00 00 80 80 80 00 00 00 1F 00 00 00 3C 01 33 00 00 00 80 00 00 12 05 00 00 00 01 " "02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 01 00 00 00 00 10 00 00 20 00 " "00 30 00 00 40 00 00 50 00 00 60 00 00 70 00 00 80 00 00 90 00 00 A0 00 00 B0 00 00 C0 00 00 D0 00 00 F0 00 00 00 01 00 " @@ -32,44 +35,25 @@ auto zrf_param_msg = QByteArray::fromHex( "20 00 06 20 10 10 00 E4 06 FF FF FF ExpertWin::ExpertWin(QWidget *parent, int rcvCardType) : BaseWin{parent}, m_iRcvCardType{rcvCardType} { setAttribute(Qt::WA_DeleteOnClose); setWindowTitle("专家调屏"); - resize(900, 720); + resize(900, 680); qDebug()<<"rcvCardType"<setContentsMargins(0,0,0,0); vBox->setSpacing(3); vBox->addLayout(addBtns(new QHBoxLayout())); auto tab = new QTabWidget; + tab->setIconSize(QSize(48, 24)); tab->setStyleSheet(R"rrr( QTabWidget::pane {border: 1px solid #888; margin-top:-1px;} QTabBar::tab {margin-top: 4px; padding: 6px 20px; border: 1px solid #888; border-radius: 0 0 3px 3px;} -QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; background-color: #000;} +QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; background-color: #666;} )rrr"); vBox->addWidget(tab); auto sendPanel = new ExpertSendPanel; - tab->addTab(sendPanel, "发送设备"); + tab->addTab(sendPanel, QIcon(":/imgs/mainsend.png"), "发送设备"); { auto file = QApplication::applicationDirPath()+"/temp.screen"; QFile qFile(file); @@ -92,10 +76,35 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou if(! json.empty()) mModule = json; } } + //added by alahover -s 20230829 + if(m_iRcvCardType== enum_zrf)//added by alahover 20230901 + { + //初始化变量 + for(int i=0;i<256;i++) + { + zrf_rcv_obj.p_x[i]=0; + zrf_rcv_obj.p_y[i]=0; + zrf_rcv_obj.p_w[i]=256; + zrf_rcv_obj.p_h[i]=1024; + zrf_rcv_obj.p_posNum[i]=0; + } + for(int i=0;i<2048;i++) + { + zrf_rcv_obj.m_pixelPos[i][0]=i%256;//描点参数中一点占用 2字节(8bit 列 + 8 bit 行) + zrf_rcv_obj.m_pixelPos[i][1]=0;//描点参数中一点占用 2字节(8bit 列 + 8 bit 行) + } + + GammaGen(zrf_rcv_obj.g_all,(float)2.2,65535); + GammaGen(zrf_rcv_obj.g_red,(float)2.2,65535); + GammaGen(zrf_rcv_obj.g_green,(float)2.2,65535); + GammaGen(zrf_rcv_obj.g_blue,(float)2.2,65535); + changeValueBySmart(); + } + //added by alahover -o 20230829 } auto receivePanel = new QWidget; - tab->addTab(receivePanel, "接收卡"); + tab->addTab(receivePanel, QIcon(":/imgs/rcv.png"), "接收卡"); { auto vBox = new VBox(receivePanel); vBox->setContentsMargins(4, 4, 4, 4); @@ -179,6 +188,13 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou btn = new QPushButton("模组选择"); btn->setProperty("ss","blue"); + connect(btn, &QPushButton::clicked, this, [=] { + //弹出模组选择对话框,可搜索查找,和下拉在厂家列表中选择 + + //选择模组后,根据模组的信息,修改相应的obj和界面 + fdChipType->setText("ICN2053"); + m_effectStack->setCurrentIndex(GetIcTypeFromName(fdChipType->text())); + }); vvv->addWidget(btn); btn = new QPushButton("智能设置"); @@ -308,294 +324,25 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou }); if(cfg["is_irr"].toBool()) fdAdvacned->setChecked(true); } - - gBox = new QGroupBox(tr("效果测试")); - //modified by alahover -s 20230830 + gBox = new QGroupBox("效果参数"); vBox->addWidget(gBox); { - if(m_iRcvCardType == enum_zrf) { - auto vBox1=new VBox(gBox); - auto hh = new HBox(vBox1); - hh->addSpacing(20); - //第一列区域 - auto vvv = new VBox(hh); - //1.1.移位时钟频率 - auto hhh = new HBox(vvv); - auto lb = new QLabel(tr("DCLK频率:")); - hhh->addWidget(lb); - cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); - cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); hhh->addWidget(cbDCLKf); - //1.2.灰度级别 - hhh = new HBox(vvv); - lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); - cbGryLevel = new QComboBox(); cbGryLevel->addItem("无灰度"); cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级"); - cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级"); - cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级"); - cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级"); hhh->addWidget(cbGryLevel); - //1.3.刷新倍率 - hhh = new HBox(vvv); - lb = new QLabel(tr("刷新倍率:")); hhh->addWidget(lb); - freshBeiLv = new QComboBox(); freshBeiLv->addItem("20");freshBeiLv->addItem("24");freshBeiLv->addItem("28");freshBeiLv->addItem("32");freshBeiLv->addItem("36");freshBeiLv->addItem("40");freshBeiLv->addItem("44");freshBeiLv->addItem("48");freshBeiLv->addItem("64M"); hhh->addWidget(freshBeiLv); - //1.4.换行时间 - hhh = new HBox(vvv); - lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); - spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); - //1.5.换行位置 - hhh = new HBox(vvv); - lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); - spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); - //1.6.行消隐时间 - hhh = new HBox(vvv); - lb = new QLabel(tr("行消隐时间(ns):")); hhh->addWidget(lb); - spinLineXy = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineXy); + auto hh = new HBox(gBox); + m_effectStack = new QStackedWidget; + auto poli = m_effectStack->sizePolicy(); + poli.setVerticalPolicy(QSizePolicy::Maximum); + m_effectStack->setSizePolicy(poli); + hh->addWidget(m_effectStack); - //第二列区域 - hh->addSpacing(20); - vvv = new VBox(hh); - //2.1.无信号数据 - hhh = new HBox(vvv); - lb = new QLabel(tr("无信号数据:")); hhh->addWidget(lb); - cbNoSign = new QComboBox(); - cbNoSign->addItem("最后一帧画面"); - cbNoSign->addItem("黑屏"); - hhh->addWidget(cbNoSign); - //2.2.显卡同步 - hhh = new HBox(vvv); - lb = new QLabel(tr("显卡同步")); hhh->addWidget(lb); - checkSyncXianKa = new QCheckBox; checkSyncXianKa->setChecked(true); hhh->addWidget(checkSyncXianKa); - //2.3.开屏渐亮 - hhh = new HBox(vvv); - lb = new QLabel(tr("双卡备份")); hhh->addWidget(lb); - checkDoubleCopy = new QCheckBox; checkDoubleCopy->setChecked(false); hhh->addWidget(checkDoubleCopy); - //2.4.开屏渐亮 - hhh = new HBox(vvv); - lb = new QLabel(tr("开屏渐亮")); hhh->addWidget(lb); - checkJianLiang = new QCheckBox; checkSyncXianKa->setChecked(false); hhh->addWidget(checkJianLiang); - //2.5.D信号为第二组时钟 - hhh = new HBox(vvv); - lb = new QLabel(tr("信号为第二组时钟")); hhh->addWidget(lb); - checkDsignalAsCLk = new QCheckBox; checkDsignalAsCLk->setChecked(false); hhh->addWidget(checkDsignalAsCLk); + normalPanel = new NormalEffectWin(this); + m_effectStack->addWidget(normalPanel); + pwmPanel = new PwmEffectWin(this); + m_effectStack->addWidget(pwmPanel); + doublelatchPanel = new DoubleLatchEffectWin(this); + m_effectStack->addWidget(doublelatchPanel); - //更多设置 - hh->addStretch(); - vvv = new VBox(hh); - vvv->addStretch(); - hhh = new HBox(vvv); - auto btn = new QPushButton(tr("更多设置")); - btn->setProperty("ss","blue"); - hhh->addWidget(btn); - btn = new QPushButton(tr("亮度设置")); - btn->setProperty("ss","blue"); - vvv->addWidget(btn); - btn = new QPushButton(tr("Gamma设置")); - btn->setProperty("ss","blue"); - vvv->addWidget(btn); - btn = new QPushButton(tr("电流增益设置")); - btn->setProperty("ss","blue"); - vvv->addWidget(btn); - - - vvv->addStretch(); - hh->addStretch(); - - vvv = new VBox(hh); - //分割线 - auto hh3 = new HBox(vvv); - QFrame * line2 = new QFrame(); - line2->setFrameShape(QFrame::VLine); - line2->setFrameShadow(QFrame::Sunken); - line2->setStyleSheet("background-color:#222;"); - hh3->addWidget(line2); - - //第三列区域 - vvv = new VBox(hh); - //3.1.DCLK相位 - hhh = new HBox(vvv); - lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); - cbDclkXw = new QComboBox(); cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度"); hhh->addWidget(cbDclkXw); - //3.2.DCLK占空比 - hhh = new HBox(vvv); - lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); - cbDclkZkb = new QComboBox(); cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%"); hhh->addWidget(cbDclkZkb); - //3.3.锁存STB相位微调 - hhh = new HBox(vvv); - lb = new QLabel(tr("锁存STB相位微调:")); hhh->addWidget(lb); - cbStb = new QComboBox(); cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟"); hhh->addWidget(cbStb); - //3.4.行信号DE相位微调 - hhh = new HBox(vvv); - lb = new QLabel(tr("行信号DE相位微调:")); hhh->addWidget(lb); - cbDE = new QComboBox(); cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟"); hhh->addWidget(cbDE); - //3.5.行信号ABC相位微调 - hhh = new HBox(vvv); - lb = new QLabel(tr("行信号ABC相位微调:")); hhh->addWidget(lb); - cbABC = new QComboBox(); cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟"); hhh->addWidget(cbABC); - //3.6.单口带载点数 - hhh = new HBox(vvv); - lb = new QLabel(tr("单口带载点数:")); hhh->addWidget(lb); - spinPointsOnePort = new QSpinBox; spinPointsOnePort->setRange(1, 999); hhh->addWidget(spinPointsOnePort); - hh->addSpacing(20); - //第四列区域 - vvv = new VBox(hh); - //4.1.消隐电平 - hhh = new HBox(vvv); - lb = new QLabel(tr("消隐电平:")); hhh->addWidget(lb); - cbXiaoYinDianPing= new QComboBox(); cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效"); hhh->addWidget(cbXiaoYinDianPing); - //4.2.锁存信号 - hhh = new HBox(vvv); - lb = new QLabel(tr("锁存信号:")); hhh->addWidget(lb); - cbSTB = new QComboBox(); cbSTB->addItem("正向");cbSTB->addItem("反向"); hhh->addWidget(cbSTB); - //4.3.行输出 - hhh = new HBox(vvv); - lb = new QLabel(tr("行输出:")); hhh->addWidget(lb); - cbSRowOut = new QComboBox(); cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效"); hhh->addWidget(cbSRowOut); - //4.4.GCLK频率 - hhh = new HBox(vvv); - lb = new QLabel(tr("GCLK频率:")); - hhh->addWidget(lb); - cbGCLKf = new QComboBox(); - cbGCLKf->addItem("25M");cbGCLKf->addItem("20.83M");cbGCLKf->addItem("17.86M");cbGCLKf->addItem("15.63M");cbGCLKf->addItem("13.89M");cbGCLKf->addItem("12.5M");cbGCLKf->addItem("11.36M");cbGCLKf->addItem("10.42M");cbGCLKf->addItem("9.62M"); - hhh->addWidget(cbGCLKf); - //4.5.GCLK相位 - hhh = new HBox(vvv); - lb = new QLabel(tr("GCLK相位:")); hhh->addWidget(lb); - spinGclkXw = new QSpinBox; spinGclkXw->setRange(20, 80); hhh->addWidget(spinGclkXw); - //4.6.GCLK占空比 - hhh = new HBox(vvv); - lb = new QLabel(tr("GCLK占空比:")); hhh->addWidget(lb); - spinGclkZkb = new QSpinBox; spinGclkZkb->setRange(20, 80); hhh->addWidget(spinGclkZkb); - - //分割线 - auto hh1 = new HBox(vBox1); - QFrame * line = new QFrame(); - line->setFrameShape(QFrame::HLine); - line->setFrameShadow(QFrame::Sunken); - line->setStyleSheet("background-color:#222;"); - hh1->addWidget(line); - - auto hh2=new HBox(vBox1); - //计算结果竖直信息区 - auto resultInfo = new HBox(hh2); - lb = new QLabel(tr("视觉刷新率:")); resultInfo->addWidget(lb); - float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); m_ctrlFreshRate = new QLabel(QString::number(freshLv1)); resultInfo->addWidget(m_ctrlFreshRate); - resultInfo->addStretch(); - lb = new QLabel(tr("亮度有效率:")); resultInfo->addWidget(lb); - float BrightYouXiaoLv1=Get_Eff(8,16); m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1)); resultInfo->addWidget(m_ctrlBrightEff); - resultInfo->addStretch(); - lb = new QLabel(tr("最小OE:")); resultInfo->addWidget(lb); - float minOe=Get_Eff(8,16); m_ctrlMinOE = new QLabel(QString::number(minOe)); resultInfo->addWidget(m_ctrlMinOE); - resultInfo->addStretch(); - } - else if(m_iRcvCardType == enum_xixun_sync) - { - auto hh = new HBox(gBox); - hh->addSpacing(20); - - auto vvv = new VBox(hh); - - auto hhh = new HBox(vvv); - auto lb = new QLabel(tr("DCLK频率:")); - hhh->addWidget(lb); - auto cbDCLKf = new QComboBox(); - cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("13.89M");cbDCLKf->addItem("12.5M"); - cbDCLKf->addItem("11.36M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("9.62M");cbDCLKf->addItem("8.9M");cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M"); - hhh->addWidget(cbDCLKf); - - hhh = new HBox(vvv); - lb = new QLabel(tr("DCLK相位:")); - hhh->addWidget(lb); - auto spinDclkXw = new QSpinBox; - spinDclkXw->setRange(0, 99999); - hhh->addWidget(spinDclkXw); - - hhh = new HBox(vvv); - lb = new QLabel(tr("DCLK占空比:")); - hhh->addWidget(lb); - auto spinDclkZkb = new QSpinBox; - spinDclkZkb->setRange(20, 80); - hhh->addWidget(spinDclkZkb); - - hhh = new HBox(vvv); - lb = new QLabel(tr("换行时间(ns):")); - hhh->addWidget(lb); - auto spinLineNs = new QSpinBox; - spinLineNs->setRange(2, 9999); - hhh->addWidget(spinLineNs); - hhh = new HBox(vvv); - lb = new QLabel(tr("视觉刷新率:")); - hhh->addWidget(lb); - float freshLv=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); - qDebug()<<"get_eff="<addWidget(lb); - - - - hh->addSpacing(20); - vvv = new VBox(hh); - hhh = new HBox(vvv); - lb = new QLabel(tr("亮度有效率:")); - hhh->addWidget(lb); - float BrightYouXiaoLv=Get_Eff(8,16); - qDebug()<<"get_eff="<addWidget(lb); - - hhh = new HBox(vvv); - lb = new QLabel(tr("GCLK频率:")); - hhh->addWidget(lb); - auto cbGCLKf = new QComboBox(); - cbGCLKf->addItem("25M"); - cbGCLKf->addItem("20.83M"); - cbGCLKf->addItem("17.86M"); - cbGCLKf->addItem("15.63M"); - cbGCLKf->addItem("13.89M"); - cbGCLKf->addItem("12.5M"); - cbGCLKf->addItem("11.36M"); - cbGCLKf->addItem("10.42M"); - cbGCLKf->addItem("9.62M"); - hhh->addWidget(cbGCLKf); - - hhh = new HBox(vvv); - lb = new QLabel(tr("灰度级数:")); - hhh->addWidget(lb); - auto cbGryLevel = new QComboBox(); - cbGryLevel->addItem("256"); - cbGryLevel->addItem("1024"); - cbGryLevel->addItem("4096"); - cbGryLevel->addItem("8192"); - cbGryLevel->addItem("16384"); - cbGryLevel->addItem("32768"); - cbGryLevel->addItem("65536"); - hhh->addWidget(cbGryLevel); - - hhh = new HBox(vvv); - lb = new QLabel(tr("GCLK占空比:")); - hhh->addWidget(lb); - auto spinGclkZkb = new QSpinBox; - spinGclkZkb->setRange(20, 80); - hhh->addWidget(spinGclkZkb); - - hhh = new HBox(vvv); - lb = new QLabel(tr("换行位置(ns):")); - hhh->addWidget(lb); - auto spinLineWz = new QSpinBox; - spinLineWz->setRange(2, 9999); - hhh->addWidget(spinLineWz); - - hh->addStretch(); - - vvv = new VBox(hh); - hhh = new HBox(vvv); - - auto btn = new QPushButton(tr("更多设置")); - btn->setProperty("ss","blue"); - hhh->addWidget(btn); - } } - vBox->addStretch(); - auto hBox = new HBox(vBox); - auto btn = new QPushButton(tr("保存接收卡配置")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { @@ -646,15 +393,9 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { //发送基本参数 - auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); - auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); - int res1=0; - //发送基本参数 - MACRO_FUNC_SEND_PARAM("读取基本参数",classToBaseMsg(),1,0x00) - //发送gamma参数 - MACRO_FUNC_SEND_PARAM("读取gamma参数",classToGammaMsg(0,flashPage),2,0x10) - //发送描点参数 - MACRO_FUNC_SEND_PARAM("读取描点参数",classToMiaoDianMsg(flashPage),16,0x30) + SendBaseParam_zrf(); + SendGammaParam_zrf(); + SendMiaoDianParam_zrf(); QMessageBox::information(this, tr("提示"), tr("发送接收卡参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); @@ -752,7 +493,7 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou } auto connPanel = new QWidget; - tab->addTab(connPanel, tr("显示屏连接(正面看屏)")); + tab->addTab(connPanel, QIcon(":/imgs/cascade.png"), tr("显示屏连接(正面看屏)")); { auto vBox = new VBox(connPanel); vBox->setContentsMargins(4, 4, 4, 4); @@ -776,7 +517,17 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou connStack->addWidget(new ExpertScreenConnWin); hBox = new HBox(vBox); - auto btn = new QPushButton(tr("保存到文件")); + auto btn = new QPushButton(tr("从文件载入")); + btn->setProperty("ss","blue"); + connect(btn, &QPushButton::clicked, this, [=] { + auto file = QFileDialog::getOpenFileName(this, tr("载入级联文件"), gFileHome, "Kcon文件 (*.kcon)"); + if(file.isEmpty()) return; + GetPaiXuJObjFromName(file); + + }); + hBox->addWidget(btn); + + btn = new QPushButton(tr("保存到文件")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { auto file = QFileDialog::getSaveFileName(this, tr("保存级联文件"), gFileHome, "Kcon文件 (*.kcon)"); @@ -793,19 +544,15 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou else QMessageBox::information(this, tr("成功"), tr("保存成功")); }); hBox->addWidget(btn); - hBox->addStretch(); btn = new QPushButton(tr("发送级联参数")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { - //发送基本参数 - auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); - auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); - int res1=0; - //发送排序参数 - MACRO_FUNC_SEND_PARAM("读取排序参数",classToPaiXuSMsg(flashPage),8,0x20) + GetPaiXuJObjFromJObj(connSavedData());//added by alahover 20230903 + //发送级联参数 + SendPaiXuParam_zrf(); QMessageBox::information(this, tr("提示"), tr("发送级联参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); @@ -837,7 +584,7 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou int iTimeout=10000; quint8 flashAddr=0x00; auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); - auto waitingDlg = new WaitingDlg(this, tr("读取基本参数")+" ..."); + WaitingDlg * waitingDlg ; //回读排序参数 flashAddr=0x20; for(int m=0;m<8;m++){ @@ -852,7 +599,7 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou else { int ioffset=headMap_zrf.paramStart+st_zrf_rb_param.param; QByteArray return_msg=res.msg.mid(ioffset,256); - waitingDlg->close(); paiXuMsgToClass((quint8 *)return_msg.data(),flashPage); qDebug()<close(); paiXuMsgToClass((quint8 *)return_msg.data(),flashPage); qDebug()<count()"<count(); for(int ss=0; sscount(); ss++) { auto connWin = (ExpertScreenConnWin*) connStack->widget(ss); JArray boxList; @@ -924,10 +670,10 @@ JObj ExpertWin::connSavedData() { {"ModuleHeight", connWin->fdCardHeight->value()}, {"PortId", nn}, {"SubId", bb+1}, - {"ScreenPosRow", pos.x()}, - {"ScreenPosCol", pos.y()}, - {"ScreenRow", connWin->table->rowCount()}, + {"ScreenPosCol", pos.x()}, + {"ScreenPosRow", pos.y()}, {"ScreenCol", connWin->table->columnCount()}, + {"ScreenRow", connWin->table->rowCount()}, {"SettingWidth", connWin->fdCardWidth->value()}, {"SettingHeight", connWin->fdCardHeight->value()}, {"ScreenIndex", ss} @@ -940,7 +686,6 @@ JObj ExpertWin::connSavedData() { } return {{"values", values}}; } - void ExpertWin::addMapData(QByteArray &data) { auto ModuleWidth = mModule["ModuleWidth"].toInt(); auto ModuleHeight = mModule["ModuleHeight"].toInt(); @@ -1191,7 +936,7 @@ void ExpertWin::classToBaseMsg() *bytePrt= ( zrf_rcv_obj.b168_7_5<<5 & 0b11100000) | ( zrf_rcv_obj.b168_4_0 & 0b00011111); bytePrt =unitptr + st_zrf_base_param.b169_redIcParam1; - memcpy(bytePrt,(unsigned char *)& zrf_rcv_obj.b169_192[0],24); + memcpy(bytePrt,(unsigned char *)& zrf_rcv_obj.b169_192[0],48); } void ExpertWin::classToGammaMsg(int iColorType,quint8 flashPage) @@ -1283,18 +1028,23 @@ void ExpertWin::classToMiaoDianMsg(quint8 flashPage) auto unitptr = (unsigned char *)zrf_param_msg.data(); unsigned char * bytePrt = (unsigned char*)(unitptr); - if(flashPage == 0x30) - { - memcpy(bytePrt,&zrf_rcv_obj.m_scanIndex , 64); - bytePrt += 64; - memcpy(bytePrt, &zrf_rcv_obj.m_pixelPos[0][0] , 256-64); - } - else - { - int itemp=(flashPage&0x0F) - 1; - int itemp2=((itemp*256)/2)+((256-64)/2); +// if(flashPage == 0x30) +// { +// memcpy(bytePrt,&zrf_rcv_obj.m_scanIndex , 64); +// bytePrt += 64; +// memcpy(bytePrt, &zrf_rcv_obj.m_pixelPos[0][0] , 256-64); +// } +// else +// { +// int itemp=(flashPage&0x0F) - 1; +// int itemp2=((itemp*256)/2)+((256-64)/2); +// memcpy(bytePrt, &zrf_rcv_obj.m_pixelPos[itemp2][0] , 256); +// } + + int itemp=(flashPage&0x0F) ; + int itemp2=(itemp*256)/2; memcpy(bytePrt, &zrf_rcv_obj.m_pixelPos[itemp2][0] , 256); - } + } void ExpertWin::baseMsgToClass(quint8 * data) { @@ -1320,10 +1070,6 @@ void ExpertWin::baseMsgToClass(quint8 * data) zrf_rcv_obj.b7_3_2 = (data[st_zrf_base_param.b7_colorIndex] & 0b00001100) >> 2; //输出数据线2,00:红;01:绿;10:蓝;11:黑; zrf_rcv_obj.b7_1_0 = (data[st_zrf_base_param.b7_colorIndex] & 0b00000011) >> 0; //输出数据线1,00:红;01:绿;10:蓝;11:黑; - qDebug()<<"***zrf_rcv_obj.b7_7_6="<>8;//行 - iPointIndex++; + for(int i=1;i<=zrf_rcv_obj.b5;i++) + { + for(int j=0;j(&QSpinBox::valueChanged), [=](int value){ qDebug() << "箱体宽度当前值:" << value; - zrf_rcv_obj.b31=value&0x00ff; zrf_rcv_obj.b32=(value&0xff00) >> 8; });// - QObject::connect(spinGclkXw, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK相位当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(spinGclkZkb, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK占空比当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(spinLineNs, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "换行时间当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(spinLineWz, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "行位置当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(spinLineXy, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "消隐时间当前值:" << value; - zrf_rcv_obj.b2=value; });// - QObject::connect(spinPointsOnePort, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "单口带载点数当前值:" << value; - zrf_rcv_obj.b193=value; }); - - //combox - QObject::connect(cbDCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DLC频率当前值:" << value; - zrf_rcv_obj.b18_3_0=value; });// - QObject::connect(cbDclkXw, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK相位当前值:" << value; - zrf_rcv_obj.b19_7_4=value; });// - QObject::connect(cbDclkZkb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK占空比当前值:" << value; - zrf_rcv_obj.b19_3_0=value; });// - QObject::connect(fdDirection, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "模组级联方向出当前值:" << value; - zrf_rcv_obj.b8_5_4=value; });// - QObject::connect(fdSectorCount, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "多开设置出当前值:" << value; - zrf_rcv_obj.b70_5_2=value; - if(zrf_rcv_obj.b70_5_2!=0) - zrf_rcv_obj.b70_6=1; - else zrf_rcv_obj.b70_6=0; });// - QObject::connect(freshBeiLv, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "刷新倍率出当前值:" << value; - zrf_rcv_obj.b21_7_5=value; });// - QObject::connect(cbGCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "GCLK周期出当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(cbGryLevel, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "灰度等级出当前值:" << value; - if(zrf_rcv_obj.m_pwmFlag==1){ - switch(value){ - case 0: zrf_rcv_obj.b21_4_0=23; break;//正常4096 - case 1: zrf_rcv_obj.b21_4_0=26; break;//正常8192 - case 2: zrf_rcv_obj.b21_4_0=29; break;//正常16384 - case 3: zrf_rcv_obj.b21_4_0=30; break;//正常32768 - case 4: zrf_rcv_obj.b21_4_0=31; break;//正常65535 - default: zrf_rcv_obj.b21_4_0=31; break;//正常65535 - } - + QObject::connect(m_effectStack, static_cast(&QStackedWidget::currentChanged), [=](int value){ qDebug() << "效果参数界面当前值:" << value; + //不同的芯片类型内,不同名称的芯片的控件取整范围也不同,需要根据IC的名称重新初始化控制内容 + if(value==0){ + normalPanel->reSetcontrolerByIcType(fdChipType->text()); } - else - zrf_rcv_obj.b21_4_0=value; });// - QObject::connect(cbNoSign, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "无信号输出出当前值:" << value; - zrf_rcv_obj.b29_1_0=value; });// - QObject::connect(cbStb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号STB微调出当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(cbDE, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号DE微调出当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(cbABC, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号ABC微调出当前值:" << value; - zrf_rcv_obj.b193=value; }); - QObject::connect(cbXiaoYinDianPing, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "消隐电平出当前值:" << value; - zrf_rcv_obj.b1_5=value; });// - QObject::connect(cbSTB, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "锁存STB电平方向出当前值:" << value; - zrf_rcv_obj.b0_6=value; });// - QObject::connect(cbSRowOut, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行输出电平出当前值:" << value; - zrf_rcv_obj.b0_4=value; });// - //checkbox - QObject::connect(checkSyncXianKa, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "同步显卡出当前值:" << value; - if(value==0) zrf_rcv_obj.b26_7=value ; - else zrf_rcv_obj.b26_7=0b1; });// - QObject::connect(checkJianLiang, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "开屏渐亮出当前值:" << value; - if(value==0) zrf_rcv_obj.b1_0=value ; - else zrf_rcv_obj.b1_0=0b1; });// - QObject::connect(checkDoubleCopy, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "双备份出当前值:" << value; - if(value==0) zrf_rcv_obj.b1_4=value ; - else zrf_rcv_obj.b1_4=0b1; });// - QObject::connect(checkDsignalAsCLk, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "D信号作为第二组CLK出当前值:" << value; - if(value==0) zrf_rcv_obj.b1_1=value ; - else zrf_rcv_obj.b1_1=0b1; });// + else if(value==1){ + pwmPanel->reSetcontrolerByIcType(fdChipType->text()); + } + else if(value == 2){ + doublelatchPanel->reSetcontrolerByIcType(fdChipType->text()); + } });// + //spinbox + if(m_iRcvCardType==enum_zrf) { + QObject::connect(fdCardWidth, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "箱体宽度当前值:" << value; + zrf_rcv_obj.b31=value&0x00ff; zrf_rcv_obj.b32=(value&0xff00) >> 8; });// + QObject::connect(fdDirection, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "模组级联方向出当前值:" << value; + zrf_rcv_obj.b8_5_4=value; });// + QObject::connect(fdSectorCount, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "多开设置出当前值:" << value; + zrf_rcv_obj.b70_5_2=value; + if(zrf_rcv_obj.b70_5_2!=0) + zrf_rcv_obj.b70_6=1; + else zrf_rcv_obj.b70_6=0; });// + } } void ExpertWin::SetEffectControlerValueByClass() { //spinbox fdCardWidth->setValue(( zrf_rcv_obj.b32<<8)|zrf_rcv_obj.b31); qDebug() << "箱体宽度当前值:" << fdCardWidth->value();// - spinGclkXw->setValue(zrf_rcv_obj.b193); qDebug() << "GCLK相位当前值:" << spinGclkXw->value(); - spinGclkZkb->setValue(zrf_rcv_obj.b193); qDebug() << "GCLK占空比当前值:" << spinGclkZkb->value(); - spinLineNs->setValue(zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value(); - spinLineWz->setValue(zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value(); - spinLineXy->setValue(zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();// - spinPointsOnePort->setValue(zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value(); - - //combox - cbDCLKf->setCurrentIndex(zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex(); - cbDclkXw->setCurrentIndex(zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex(); - cbDclkZkb->setCurrentIndex(zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex(); fdDirection->setCurrentIndex(zrf_rcv_obj.b8_5_4); qDebug() << "模组级联方向出当前值:" << fdDirection->currentIndex(); fdSectorCount->setCurrentIndex(zrf_rcv_obj.b70_5_2); qDebug() << "多开设置出当前值:" << fdSectorCount->currentIndex(); - freshBeiLv->setCurrentIndex(zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex(); - cbGCLKf->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "GCLK周期出当前值:" << cbGCLKf->currentIndex(); - - int index=31; - if(zrf_rcv_obj.m_pwmFlag==1) - switch(zrf_rcv_obj.b21_4_0){ - case 23: index=0; break;//正常4096 - case 26: index=1; break;//正常8192 - case 29: index=2; break;//正常16384 - case 30: index=3; break;//正常32768 - case 31: index=4; break;//正常65535 - default: index=4; break;//正常65535 - } - else - index=zrf_rcv_obj.b21_4_0; - cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex(); - cbNoSign->setCurrentIndex(zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex(); - cbStb->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex(); - cbDE->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex(); - cbABC->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex(); - cbXiaoYinDianPing->setCurrentIndex(zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex(); - cbSTB->setCurrentIndex(zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex(); - cbSRowOut->setCurrentIndex(zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex(); - //checkbox - checkSyncXianKa->setChecked(zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked(); - checkJianLiang->setChecked(zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked(); - checkDoubleCopy->setChecked(zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked(); - checkDsignalAsCLk->setChecked(zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked(); - if(m_iRcvCardType == enum_zrf) { - //发送基本参数 - auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); - auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); - int res1=0; - //发送基本参数 - MACRO_FUNC_SEND_PARAM("读取基本参数",classToBaseMsg(),1,0x00) + if(m_effectStack->currentIndex()==0){ + qDebug()<<"normalPanel->SetEffectControlerValueByClass();"; + normalPanel->SetEffectControlerValueByClass(); + } + else if(m_effectStack->currentIndex()==1){ + qDebug()<<"pwmPanel->SetEffectControlerValueByClass();"; + pwmPanel->SetEffectControlerValueByClass(); + } + else if(m_effectStack->currentIndex()==2){ + qDebug()<<"doublelatchPanel->SetEffectControlerValueByClass();"; + doublelatchPanel->SetEffectControlerValueByClass(); } } //added by alahover -o 20230830 +//added by alahover -s 02030903 +void ExpertWin::SendBaseParam_zrf() +{ + if(m_iRcvCardType == enum_zrf) { + auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); + auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); + int res1=0; + MACRO_FUNC_SEND_PARAM("发送基本参数",classToBaseMsg(),1,0x00) + } +} +void ExpertWin::SendGammaParam_zrf() +{ + if(m_iRcvCardType == enum_zrf) { + auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); + auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); + int res1=0; + MACRO_FUNC_SEND_PARAM("发送gamma参数",classToGammaMsg(0,flashPage),2,0x10) + } +} +void ExpertWin::SendMiaoDianParam_zrf() +{ + if(m_iRcvCardType == enum_zrf) { + auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); + auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); + int res1=0; + MACRO_FUNC_SEND_PARAM("发送描点参数",classToMiaoDianMsg(flashPage),16,0x30) + } +} +void ExpertWin::SendPaiXuParam_zrf() +{ + if(m_iRcvCardType == enum_zrf) { + auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); + auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); + int res1=0; + MACRO_FUNC_SEND_PARAM("发送排序参数",classToPaiXuSMsg(flashPage),8,0x20) + } +} +void ExpertWin::GetPaiXuJObjFromJObj(JObj obj) +{ + int iCountInNet0=0; + JArray valueList=obj["values"].toArray(); + for(int m=0;mwidget(m); + connWin->InitByJObj(valueList[m].toObj()); + auto boxList =valueList[m]["boxList"].toArray(); + for(int i=0;i #include #include +#include class ExpertWin : public BaseWin { Q_OBJECT @@ -44,11 +45,14 @@ public: QRadioButton *fdAdvacned; QPushButton *btnConnReadBack, *btnReceiveReadBack; - QSpinBox *spinGclkXw,*spinGclkZkb,*spinLineNs,*spinLineWz,*spinLineXy,*spinPointsOnePort; - QComboBox *cbDCLKf,*cbDclkXw, *cbDclkZkb,*freshBeiLv,*cbGCLKf,*cbGryLevel,*cbNoSign,*cbStb,*cbDE,*cbABC,*cbXiaoYinDianPing,*cbSTB,*cbSRowOut; - QLabel * m_ctrlFreshRate,*m_ctrlBrightEff,*m_ctrlMinOE; - QCheckBox * checkSyncXianKa,*checkJianLiang,*checkDoubleCopy,*checkDsignalAsCLk; - +// QSpinBox *spinGclkXw,*spinGclkZkb,*spinLineNs,*spinLineWz,*spinLineXy,*spinPointsOnePort; +// QComboBox *cbDCLKf,*cbDclkXw, *cbDclkZkb,*freshBeiLv,*cbGCLKf,*cbGryLevel,*cbNoSign,*cbStb,*cbDE,*cbABC,*cbXiaoYinDianPing,*cbSTB,*cbSRowOut; +// QLabel * m_ctrlFreshRate,*m_ctrlBrightEff,*m_ctrlMinOE; +// QCheckBox * checkSyncXianKa,*checkJianLiang,*checkDoubleCopy,*checkDsignalAsCLk; + QStackedWidget *m_effectStack;//added by alahover 20230904 +// NormalEffectWin * normalPanel ; +// PwmEffectWin * pwmPanel ; +// DoubleLatchEffectWin * doublelatchPanel; //added by alahover -o 20230830 //added by alahover -s 20230817 @@ -214,18 +218,18 @@ public: unsigned char b168_4_0 = 0b00000; //消隐延迟时间:(输入值+1)*48ns // unsigned char b168 = (b168_7_5<<5 & 0b11100000) | (b168_4_0 & 0b00011111); - unsigned short b169_192[12] = {0x0000,//红芯片参数 1 高字节,红芯片参数 1 低字节 - 0x0000,//红芯片参数 2 高字节,红芯片参数 2 低字节 - 0x0000,//红芯片参数 3 高字节,红芯片参数 3 低字节 - 0x0000,//绿芯片参数 1 高字节,绿芯片参数 1 低字节 - 0x0000,//绿芯片参数 2 高字节,绿芯片参数 2 低字节 - 0x0000,//绿芯片参数 3 高字节,绿芯片参数 3 低字节 - 0x0000,//蓝芯片参数 1 高字节,蓝芯片参数 1 低字节 - 0x0000,//蓝芯片参数 2 高字节,蓝芯片参数 2 低字节 - 0x0000,//蓝芯片参数 3 高字节,蓝芯片参数 3 低字节 - 0x0000,//红芯片参数 4 高字节,红芯片参数 4 低字节 - 0x0000,//绿芯片参数 4 高字节,绿芯片参数 4 低字节 - 0x0000 //蓝芯片参数 4 高字节,蓝芯片参数 4 低字节 + unsigned char b169_192[48] = {0x00,0x00,//红芯片参数 1 高字节,红芯片参数 1 低字节 + 0x00,0x00,//红芯片参数 2 高字节,红芯片参数 2 低字节 + 0x00,0x00,//红芯片参数 3 高字节,红芯片参数 3 低字节 + 0x00,0x00,//绿芯片参数 1 高字节,绿芯片参数 1 低字节 + 0x00,0x00,//绿芯片参数 2 高字节,绿芯片参数 2 低字节 + 0x00,0x00,//绿芯片参数 3 高字节,绿芯片参数 3 低字节 + 0x00,0x00,//蓝芯片参数 1 高字节,蓝芯片参数 1 低字节 + 0x00,0x00,//蓝芯片参数 2 高字节,蓝芯片参数 2 低字节 + 0x00,0x00,//蓝芯片参数 3 高字节,蓝芯片参数 3 低字节 + 0x00,0x00,//红芯片参数 4 高字节,红芯片参数 4 低字节 + 0x00,0x00,//绿芯片参数 4 高字节,绿芯片参数 4 低字节 + 0x00,0x00 //蓝芯片参数 4 高字节,蓝芯片参数 4 低字节 }; unsigned char b193 = 0x00; //保留 @@ -246,7 +250,6 @@ public: unsigned char p6_reserve=0;//保留 unsigned char p7_reserve1=0;//保留 St_Rcv_Pos p8_st_rcv_pos[256]; - unsigned short p_x[256]={0}; unsigned short p_y[256]={0}; unsigned short p_w[256]={256}; @@ -280,12 +283,21 @@ public: int GetIcTypeIndexFromName(QString strName); int GetRowYiMaIndexFromName(QString strName); //added by alahover -o 20230830 - //added by alahover -o 20230823 - + //added by alahover -s 20230903 + void SendBaseParam_zrf();//added by alahover 20230903 + void SendGammaParam_zrf();//added by alahover 20230903 + void SendMiaoDianParam_zrf();//added by alahover 20230903 + void SendPaiXuParam_zrf();//added by alahover 20230903 + int GetPaiXuJObjFromName(QString strName);//added by alahover 20230903 + void GetPaiXuJObjFromJObj(JObj obj); + JObj ClassToJObj(); + //added by alahover -o 20230903 protected: void closeEvent(QCloseEvent *) override; }; + + #define MACRO_FUNC_SEND_PARAM(TIP_MESSAGE,FUNC,SEND_FLASHPAGE_NUM,FLASH_ADDR) \ for(int iSendCount=0;iSendCount callback, WaitingDlg *waitingDlg = 0) { diff --git a/ledset/gutil/cu.h b/ledset/gutil/cu.h index 0af412d..8e671f3 100644 --- a/ledset/gutil/cu.h +++ b/ledset/gutil/cu.h @@ -176,6 +176,17 @@ public: new (this) LinkedMap(other); return *this; } + V &operator[](const K &k) { + if(_pri==0) _pri = new LinkedMapPri; + auto pair = _pri->map.emplace(k, nullptr); + if(pair.second) { + auto node = new Node{_pri, _pri->prev, {k, V()}}; + _pri->prev->next = node; + _pri->prev = node; + pair.first->second = node; + } + return pair.first->second->value.second; + } const V operator[](const K &k) const { if(_pri==0) return V(); auto it = _pri->map.find(k); diff --git a/ledset/ic_ui/doublelatcheffectwin.cpp b/ledset/ic_ui/doublelatcheffectwin.cpp new file mode 100644 index 0000000..6a20996 --- /dev/null +++ b/ledset/ic_ui/doublelatcheffectwin.cpp @@ -0,0 +1,297 @@ +#include "doublelatcheffectwin.h" +#include "globalfunc.h" +#include "gutil/qgui.h" +#include +#include +#include +#include "efffrefr.h" +DoubleLatchEffectWin::DoubleLatchEffectWin(ExpertWin *parent) +{ + expertWin=parent; + resize(880, 220); + { + if(expertWin->m_iRcvCardType == enum_zrf) + { + auto vBox1=new VBox(this); + auto hh = new HBox(vBox1); + hh->addSpacing(20); + //第一列区域 + auto vvv = new VBox(hh); + //1.1.移位时钟频率 + auto hhh = new HBox(vvv); + auto lb = new QLabel(tr("DCLK频率:")); + hhh->addWidget(lb); + cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); hhh->addWidget(cbDCLKf); + //1.2.灰度级别 + hhh = new HBox(vvv); + lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); + cbGryLevel = new QComboBox(); cbGryLevel->addItem("无灰度"); cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级"); + cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级"); + cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级"); + cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级"); hhh->addWidget(cbGryLevel); + //1.3.刷新倍率 + hhh = new HBox(vvv); + lb = new QLabel(tr("刷新倍率:")); hhh->addWidget(lb); + freshBeiLv = new QComboBox(); freshBeiLv->addItem("20");freshBeiLv->addItem("24");freshBeiLv->addItem("28");freshBeiLv->addItem("32");freshBeiLv->addItem("36");freshBeiLv->addItem("40");freshBeiLv->addItem("44");freshBeiLv->addItem("48");freshBeiLv->addItem("64M"); hhh->addWidget(freshBeiLv); + //1.4.换行时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); + spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); + //1.5.换行位置 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); + spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); + //1.6.行消隐时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("行消隐时间(ns):")); hhh->addWidget(lb); + spinLineXy = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineXy); + + //第二列区域 + hh->addSpacing(20); + vvv = new VBox(hh); + //2.1.无信号数据 + hhh = new HBox(vvv); + lb = new QLabel(tr("无信号数据:")); hhh->addWidget(lb); + cbNoSign = new QComboBox(); + cbNoSign->addItem("最后一帧画面");cbNoSign->addItem("黑屏"); hhh->addWidget(cbNoSign); + //2.2.显卡同步 + hhh = new HBox(vvv); + lb = new QLabel(tr("显卡同步")); hhh->addWidget(lb); + checkSyncXianKa = new QCheckBox; checkSyncXianKa->setChecked(true); hhh->addWidget(checkSyncXianKa); + //2.3.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("双卡备份")); hhh->addWidget(lb); + checkDoubleCopy = new QCheckBox; checkDoubleCopy->setChecked(false); hhh->addWidget(checkDoubleCopy); + //2.4.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("开屏渐亮")); hhh->addWidget(lb); + checkJianLiang = new QCheckBox; checkSyncXianKa->setChecked(false); hhh->addWidget(checkJianLiang); + //2.5.D信号为第二组时钟 + hhh = new HBox(vvv); + lb = new QLabel(tr("信号为第二组时钟")); hhh->addWidget(lb); + checkDsignalAsCLk = new QCheckBox; checkDsignalAsCLk->setChecked(false); hhh->addWidget(checkDsignalAsCLk); + + //更多设置 + hh->addStretch(); + vvv = new VBox(hh); + vvv->addStretch(); + hhh = new HBox(vvv); + auto btn = new QPushButton(tr("更多设置")); + btn->setProperty("ss","blue"); + hhh->addWidget(btn); + connect(btn, &QPushButton::clicked, this, [=] { + + }); + + + + vvv->addStretch(); + hh->addStretch(); + + vvv = new VBox(hh); + //分割线 + auto hh3 = new HBox(vvv); + QFrame * line2 = new QFrame(); + line2->setFrameShape(QFrame::VLine); + line2->setFrameShadow(QFrame::Sunken); + line2->setStyleSheet("background-color:#222;"); + hh3->addWidget(line2); + + //第三列区域 + vvv = new VBox(hh); + //3.1.DCLK相位 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); + cbDclkXw = new QComboBox(); cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度"); hhh->addWidget(cbDclkXw); + //3.2.DCLK占空比 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); + cbDclkZkb = new QComboBox(); cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%"); hhh->addWidget(cbDclkZkb); + //3.3.锁存STB相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存STB相位微调:")); hhh->addWidget(lb); + cbStb = new QComboBox(); cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟"); hhh->addWidget(cbStb); + //3.4.行信号DE相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号DE相位微调:")); hhh->addWidget(lb); + cbDE = new QComboBox(); cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟"); hhh->addWidget(cbDE); + //3.5.行信号ABC相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号ABC相位微调:")); hhh->addWidget(lb); + cbABC = new QComboBox(); cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟"); hhh->addWidget(cbABC); + //3.6.单口带载点数 + hhh = new HBox(vvv); + lb = new QLabel(tr("单口带载点数:")); hhh->addWidget(lb); + spinPointsOnePort = new QSpinBox; spinPointsOnePort->setRange(1, 999); hhh->addWidget(spinPointsOnePort); + hh->addSpacing(20); + //第四列区域 + vvv = new VBox(hh); + //4.1.消隐电平 + hhh = new HBox(vvv); + lb = new QLabel(tr("消隐电平:")); hhh->addWidget(lb); + cbXiaoYinDianPing= new QComboBox(); cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效"); hhh->addWidget(cbXiaoYinDianPing); + //4.2.锁存信号 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存信号:")); hhh->addWidget(lb); + cbSTB = new QComboBox(); cbSTB->addItem("正向");cbSTB->addItem("反向"); hhh->addWidget(cbSTB); + //4.3.行输出 + hhh = new HBox(vvv); + lb = new QLabel(tr("行输出:")); hhh->addWidget(lb); + cbSRowOut = new QComboBox(); cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效"); hhh->addWidget(cbSRowOut); + //分割线 + auto hh1 = new HBox(vBox1); + QFrame * line = new QFrame(); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + line->setStyleSheet("background-color:#222;"); + hh1->addWidget(line); + + auto hh2=new HBox(vBox1); + //计算结果竖直信息区 + auto resultInfo = new HBox(hh2); + lb = new QLabel(tr("[双锁存]视觉刷新率:")); resultInfo->addWidget(lb); + float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); m_ctrlFreshRate = new QLabel(QString::number(freshLv1)); resultInfo->addWidget(m_ctrlFreshRate); + resultInfo->addStretch(); + lb = new QLabel(tr("亮度有效率:")); resultInfo->addWidget(lb); + float BrightYouXiaoLv1=Get_Eff(8,16); m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1)); resultInfo->addWidget(m_ctrlBrightEff); + resultInfo->addStretch(); + lb = new QLabel(tr("最小OE:")); resultInfo->addWidget(lb); + float minOe=Get_Eff(8,16); m_ctrlMinOE = new QLabel(QString::number(minOe)); resultInfo->addWidget(m_ctrlMinOE); + resultInfo->addStretch(); + + vBox1->addStretch(); + changeValueByEffectControler() ; + + } + else if(expertWin->m_iRcvCardType == enum_xixun_sync) + { + + } + } + +} +void DoubleLatchEffectWin::changeValueByEffectControler() { + //spinbox + if(expertWin->m_iRcvCardType==enum_zrf) + { + QObject::connect(spinLineNs, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "换行时间当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineWz, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "行位置当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineXy, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "消隐时间当前值:" << value; + expertWin->zrf_rcv_obj.b2=value; });// + QObject::connect(spinPointsOnePort, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "单口带载点数当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + + //combox + QObject::connect(cbDCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DLC频率当前值:" << value; + expertWin->zrf_rcv_obj.b18_3_0=value; });// + QObject::connect(cbDclkXw, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK相位当前值:" << value; + expertWin->zrf_rcv_obj.b19_7_4=value; });// + QObject::connect(cbDclkZkb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK占空比当前值:" << value; + expertWin->zrf_rcv_obj.b19_3_0=value; });// + QObject::connect(freshBeiLv, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "刷新倍率出当前值:" << value; + expertWin->zrf_rcv_obj.b21_7_5=value; });// + QObject::connect(cbGryLevel, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "灰度等级出当前值:" << value; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1){ + switch(value){ + case 0: expertWin->zrf_rcv_obj.b21_4_0=23; break;//正常4096 + case 1: expertWin->zrf_rcv_obj.b21_4_0=26; break;//正常8192 + case 2: expertWin->zrf_rcv_obj.b21_4_0=29; break;//正常16384 + case 3: expertWin->zrf_rcv_obj.b21_4_0=30; break;//正常32768 + case 4: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + default: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + } + + } + else + expertWin->zrf_rcv_obj.b21_4_0=value; });// + QObject::connect(cbNoSign, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "无信号输出出当前值:" << value; + expertWin->zrf_rcv_obj.b29_1_0=value; });// + QObject::connect(cbStb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号STB微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbDE, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号DE微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbABC, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号ABC微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbXiaoYinDianPing, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "消隐电平出当前值:" << value; + expertWin->zrf_rcv_obj.b1_5=value; });// + QObject::connect(cbSTB, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "锁存STB电平方向出当前值:" << value; + expertWin->zrf_rcv_obj.b0_6=value; });// + QObject::connect(cbSRowOut, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行输出电平出当前值:" << value; + expertWin->zrf_rcv_obj.b0_4=value; });// + //checkbox + QObject::connect(checkSyncXianKa, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "同步显卡出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b26_7=value ; + else expertWin->zrf_rcv_obj.b26_7=0b1; });// + QObject::connect(checkJianLiang, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "开屏渐亮出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_0=value ; + else expertWin->zrf_rcv_obj.b1_0=0b1; });// + QObject::connect(checkDoubleCopy, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "双备份出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_4=value ; + else expertWin->zrf_rcv_obj.b1_4=0b1; });// + QObject::connect(checkDsignalAsCLk, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "D信号作为第二组CLK出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_1=value ; + else expertWin->zrf_rcv_obj.b1_1=0b1; });// + + } + +} +void DoubleLatchEffectWin::SetEffectControlerValueByClass() +{ + if(expertWin->m_iRcvCardType == enum_zrf) { + //spinbox + spinLineNs->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value(); + spinLineWz->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value(); + spinLineXy->setValue(expertWin->zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();// + spinPointsOnePort->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value(); + + //combox + cbDCLKf->setCurrentIndex(expertWin->zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex(); + cbDclkXw->setCurrentIndex(expertWin->zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex(); + cbDclkZkb->setCurrentIndex(expertWin->zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex(); + freshBeiLv->setCurrentIndex(expertWin->zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex(); + + int index=31; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1) + switch(expertWin->zrf_rcv_obj.b21_4_0){ + case 23: index=0; break;//正常4096 + case 26: index=1; break;//正常8192 + case 29: index=2; break;//正常16384 + case 30: index=3; break;//正常32768 + case 31: index=4; break;//正常65535 + default: index=4; break;//正常65535 + } + else + index=expertWin->zrf_rcv_obj.b21_4_0; + cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex(); + cbNoSign->setCurrentIndex(expertWin->zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex(); + cbStb->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex(); + cbDE->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex(); + cbABC->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex(); + cbXiaoYinDianPing->setCurrentIndex(expertWin->zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex(); + cbSTB->setCurrentIndex(expertWin->zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex(); + cbSRowOut->setCurrentIndex(expertWin->zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex(); + //checkbox + checkSyncXianKa->setChecked(expertWin->zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked(); + checkJianLiang->setChecked(expertWin->zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked(); + checkDoubleCopy->setChecked(expertWin->zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked(); + checkDsignalAsCLk->setChecked(expertWin->zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked(); + expertWin->SendBaseParam_zrf(); + } +} +void DoubleLatchEffectWin::reSetcontrolerByIcType(QString strIcName) +{ + if(strIcName == "ICN2053") + { + cbDCLKf->clear(); + cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); + + cbGryLevel->clear(); + cbGryLevel->addItem("正常16384"); + freshBeiLv->clear(); + freshBeiLv->addItem("8"); + } +} diff --git a/ledset/ic_ui/doublelatcheffectwin.h b/ledset/ic_ui/doublelatcheffectwin.h new file mode 100644 index 0000000..fed10eb --- /dev/null +++ b/ledset/ic_ui/doublelatcheffectwin.h @@ -0,0 +1,25 @@ +#ifndef DOUBLELATCHEFFECTWIN_H +#define DOUBLELATCHEFFECTWIN_H +#include +#include +#include "expertwin.h" +#include +#include +#include +#include +#include +class DoubleLatchEffectWin: public QWidget +{ +public: + DoubleLatchEffectWin(ExpertWin *parent = nullptr); + ExpertWin *expertWin; + QSpinBox *spinLineNs,*spinLineWz,*spinLineXy,*spinPointsOnePort; + QComboBox *cbDCLKf,*cbDclkXw, *cbDclkZkb,*freshBeiLv,*cbGryLevel,*cbNoSign,*cbStb,*cbDE,*cbABC,*cbXiaoYinDianPing,*cbSTB,*cbSRowOut; + QLabel * m_ctrlFreshRate,*m_ctrlBrightEff,*m_ctrlMinOE; + QCheckBox * checkSyncXianKa,*checkJianLiang,*checkDoubleCopy,*checkDsignalAsCLk; + void changeValueByEffectControler(); + void SetEffectControlerValueByClass(); + void reSetcontrolerByIcType(QString strIcName); +}; + +#endif // DOUBLELATCHEFFECTWIN_H diff --git a/ledset/ic_ui/icn2053.cpp b/ledset/ic_ui/icn2053.cpp new file mode 100644 index 0000000..327fbfa --- /dev/null +++ b/ledset/ic_ui/icn2053.cpp @@ -0,0 +1,584 @@ +#include "icn2053.h" +#include +#include +#include "gutil/qgui.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +icn_2053::icn_2053(ExpertWin *expertWin) : BaseWin{expertWin}, expertWin(expertWin) +{ + setWindowModality(Qt::WindowModal); + setAttribute(Qt::WA_DeleteOnClose); + setWindowTitle(tr("电流增益调节设置")); + resize(480, 200); + auto vBox = new QVBoxLayout(center); + vBox->setContentsMargins(0,0,0,0); + vBox->setSpacing(3); + vBox->addLayout(addBtns(new QHBoxLayout())); + + + + auto tab = new QTabWidget; + tab->setStyleSheet(R"rrr( +QTabWidget::pane {border: 1px solid #888; margin-top:-1px;} +QTabBar::tab {margin-top: 4px; padding: 6px 20px; border: 1px solid #888; border-radius: 0 0 3px 3px;} +QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; background-color: #666;} +)rrr"); + vBox->addWidget(tab); + + auto dianliu = new QWidget; + tab->addTab(dianliu, "电流增益调节"); + { + int iMax=200; + int iMin=10; + int iInitValue=100; + auto vBox = new VBox(dianliu); + vBox->addStretch(); + auto hBox = new HBox(vBox); + auto lb = new QLabel(tr("红灯")+":"); + lb->setMinimumWidth(70); + lb->setAlignment(Qt::AlignRight); + hBox->addWidget(lb); + + fdBright_r = new QSpinBox(); + fdBright_r->setRange(iMin,iMax); + fdBright_r->setValue(iInitValue); + hBox->addWidget(fdBright_r); + hBox->addSpacing(10); + + sliBright_r = new QSlider(Qt::Horizontal); + sliBright_r->setRange(iMin,iMax); + sliBright_r->setValue(iInitValue); + hBox->addWidget(sliBright_r); + connect(fdBright_r, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value){ + sliBright_r->setValue(value); + if(m_chk->isChecked()){ + sliBright_g->setValue(value); + sliBright_b->setValue(value); + } + }); + connect(sliBright_r, &QSlider::valueChanged, this, [=](int value){ + fdBright_r->setValue(value); + if(m_chk->isChecked()){ + fdBright_b->setValue(value); + fdBright_g->setValue(value); + } + }); + + hBox = new HBox(vBox); + lb = new QLabel(tr("绿灯")+":"); + lb->setMinimumWidth(70); + lb->setAlignment(Qt::AlignRight); + hBox->addWidget(lb); + + fdBright_g = new QSpinBox(); + fdBright_g->setRange(iMin,iMax); + fdBright_g->setValue(iInitValue); + hBox->addWidget(fdBright_g); + hBox->addSpacing(10); + + sliBright_g = new QSlider(Qt::Horizontal); + sliBright_g->setRange(iMin,iMax); + sliBright_g->setValue(iInitValue); + hBox->addWidget(sliBright_g); + connect(fdBright_g, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value){ + sliBright_g->setValue(value); + if(m_chk->isChecked()){ + sliBright_r->setValue(value); + sliBright_b->setValue(value); + } + }); + connect(sliBright_g, &QSlider::valueChanged, this, [=](int value){ + fdBright_g->setValue(value); + if(m_chk->isChecked()){ + fdBright_r->setValue(value); + fdBright_b->setValue(value); + } + }); + + hBox = new HBox(vBox); + lb = new QLabel(tr("蓝灯")+":"); + lb->setMinimumWidth(70); + lb->setAlignment(Qt::AlignRight); + hBox->addWidget(lb); + + fdBright_b = new QSpinBox(); + fdBright_b->setRange(iMin,iMax); + fdBright_b->setValue(iInitValue); + hBox->addWidget(fdBright_b); + hBox->addSpacing(10); + + sliBright_b = new QSlider(Qt::Horizontal); + sliBright_b->setRange(iMin,iMax); + sliBright_b->setValue(iInitValue); + hBox->addWidget(sliBright_b); + connect(fdBright_b, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value){ + sliBright_b->setValue(value); + if(m_chk->isChecked()){ + sliBright_g->setValue(value); + sliBright_r->setValue(value); + } + }); + connect(sliBright_b, &QSlider::valueChanged, this, [=](int value){ + fdBright_b->setValue(value); + if(m_chk->isChecked()){ + fdBright_r->setValue(value); + fdBright_g->setValue(value); + } + }); + + hBox = new HBox(vBox); + m_chk = new QCheckBox(tr("同步")); + connect(m_chk, &QCheckBox::stateChanged, this, [=](int value) { + if(value==0) + { + } + else{ + fdBright_g->setValue(fdBright_r->value()); + fdBright_b->setValue(fdBright_r->value()); + } + }); + hBox->addWidget(m_chk); + + + vBox->addStretch(); + + //应用按钮 + hBox = new HBox(vBox); + auto btn = new QPushButton(tr("应用")); + btn->setProperty("ss","blue"); + hBox->addStretch(); + hBox->addWidget(btn); + hBox->addStretch(); + connect(btn, &QPushButton::clicked, this, [this] { + + }); + + + } + auto kuoZhan = new QWidget; + + tab->addTab(kuoZhan, "扩展属性"); + { + auto vBox = new VBox(kuoZhan); + auto gBox = new QGroupBox(""); + vBox->addWidget(gBox); + { + auto hh = new HBox(gBox); + hh->addSpacing(20); + auto vvv = new VBox(hh); + vvv->addStretch(); + auto lb = new QLabel(" "); + vvv->addWidget(lb); + lb = new QLabel("低灰麻点优化: "); + vvv->addWidget(lb); + lb = new QLabel("消隐等级: "); + vvv->addWidget(lb); + lb = new QLabel("低灰白平衡调节: "); + vvv->addWidget(lb); + vvv->addStretch(); + + + vvv = new VBox(hh); + vvv->addStretch(); + lb = new QLabel("红芯片 "); + vvv->addWidget(lb); + auto r_madianyouhua = new QSpinBox(); + r_madianyouhua->setRange(0,3); + r_madianyouhua->setValue(1); + vvv->addWidget(r_madianyouhua); + auto r_xiaoyinlevel = new QSpinBox(); + r_xiaoyinlevel->setRange(0,31); + r_xiaoyinlevel->setValue(31); + vvv->addWidget(r_xiaoyinlevel); + auto r_dibaipingheng = new QSpinBox(); + r_madianyouhua->setRange(0,15); + r_madianyouhua->setValue(15); + vvv->addWidget(r_dibaipingheng); + vvv->addStretch(); + + vvv = new VBox(hh); + vvv->addStretch(); + lb = new QLabel("绿芯片 "); + vvv->addWidget(lb); + auto g_madianyouhua = new QSpinBox(); + g_madianyouhua->setRange(0,3); + g_madianyouhua->setValue(1); + vvv->addWidget(g_madianyouhua); + auto g_xiaoyinlevel = new QSpinBox(); + g_xiaoyinlevel->setRange(0,31); + g_xiaoyinlevel->setValue(31); + vvv->addWidget(g_xiaoyinlevel); + auto g_dibaipingheng = new QSpinBox(); + g_madianyouhua->setRange(0,15); + g_madianyouhua->setValue(15); + vvv->addWidget(g_dibaipingheng); + vvv->addStretch(); + + vvv = new VBox(hh); + vvv->addStretch(); + lb = new QLabel("蓝芯片 "); + vvv->addWidget(lb); + auto b_madianyouhua = new QSpinBox(); + b_madianyouhua->setRange(0,3); + b_madianyouhua->setValue(1); + vvv->addWidget(b_madianyouhua); + auto b_xiaoyinlevel = new QSpinBox(); + b_xiaoyinlevel->setRange(0,31); + b_xiaoyinlevel->setValue(31); + vvv->addWidget(b_xiaoyinlevel); + auto b_dibaipingheng = new QSpinBox(); + b_madianyouhua->setRange(0,15); + b_madianyouhua->setValue(15); + vvv->addWidget(b_dibaipingheng); + vvv->addStretch(); + + + hh = new HBox(vBox); + //亮度调节 + lb = new QLabel(tr("亮度调节(10~100):")); hh->addWidget(lb); + auto spinbright = new QSpinBox; spinbright->setRange(10, 100); spinbright->setValue(100); hh->addWidget(spinbright); hh->addStretch(); + vBox->addStretch(); + } + //应用按钮 + auto hBox = new HBox(vBox); + auto btn = new QPushButton(tr("应用")); + btn->setProperty("ss","blue"); + hBox->addStretch(); + hBox->addWidget(btn); + hBox->addStretch(); + + connect(btn, &QPushButton::clicked, this, [this] { + + }); + } + auto AdvanceAdjust = new QWidget; + tab->addTab(AdvanceAdjust, "高级调节"); + { + auto vBox = new VBox(AdvanceAdjust); + auto hBox = new HBox(vBox); + auto gBox = new QGroupBox("第一组寄存器"); + hBox->addWidget(gBox); + { + auto hh = new HBox(gBox); + hh->addSpacing(20); + auto vvv = new VBox(hh); + auto lb = new QLabel(" "); + vvv->addWidget(lb); + vvv->addSpacing(5); + lb = new QLabel("红芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(6); + lb = new QLabel("绿芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(7); + lb = new QLabel("蓝芯片: "); + vvv->addWidget(lb); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("高字节(hex) "); + vvv->addWidget(lb); + QRegExp regx("[A-Fa-f0-9]{2}"); + m_r_AddrH1= new QLineEdit("1F"); + QValidator *validator = new QRegExpValidator(regx); + m_r_AddrH1->setValidator(validator); + vvv->addWidget(m_r_AddrH1); + m_g_AddrH1 = new QLineEdit("1F") ; + m_g_AddrH1->setValidator(validator); + vvv->addWidget(m_g_AddrH1); + m_b_AddrH1 = new QLineEdit("1F") ; + m_b_AddrH1->setValidator(validator); + vvv->addWidget(m_b_AddrH1); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("低字节(hex) "); + vvv->addWidget(lb); + + m_r_AddrL1= new QLineEdit("70"); + m_r_AddrL1->setValidator(validator); + vvv->addWidget(m_r_AddrL1); + m_g_AddrL1 = new QLineEdit("70") ; + m_g_AddrL1->setValidator(validator); + vvv->addWidget(m_g_AddrL1); + m_b_AddrL1 = new QLineEdit("70") ; + m_b_AddrL1->setValidator(validator); + vvv->addWidget(m_b_AddrL1); + vvv->addStretch(); + + } + gBox = new QGroupBox("第二组寄存器"); + hBox->addWidget(gBox); + { + auto hh = new HBox(gBox); + hh->addSpacing(20); + auto vvv = new VBox(hh); + auto lb = new QLabel(" "); + vvv->addWidget(lb); + vvv->addSpacing(6); + lb = new QLabel("红芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(5); + lb = new QLabel("绿芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(7); + lb = new QLabel("蓝芯片: "); + vvv->addWidget(lb); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("高字节(hex) "); + vvv->addWidget(lb); + QRegExp regx("[A-Fa-f0-9]{2}"); + m_r_AddrH2= new QLineEdit("7F"); + QValidator *validator = new QRegExpValidator(regx); + m_r_AddrH2->setValidator(validator); + vvv->addWidget(m_r_AddrH2); + m_g_AddrH2 = new QLineEdit("7F") ; + m_g_AddrH2->setValidator(validator); + vvv->addWidget(m_g_AddrH2); + m_b_AddrH2 = new QLineEdit("7F") ; + m_b_AddrH2->setValidator(validator); + vvv->addWidget(m_b_AddrH2); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("低字节(hex) "); + vvv->addWidget(lb); + + m_r_AddrL2= new QLineEdit("FF"); + m_r_AddrL2->setValidator(validator); + vvv->addWidget(m_r_AddrL2); + m_g_AddrL2 = new QLineEdit("FF") ; + m_g_AddrL2->setValidator(validator); + vvv->addWidget(m_g_AddrL2); + m_b_AddrL2 = new QLineEdit("FF") ; + m_b_AddrL2->setValidator(validator); + vvv->addWidget(m_b_AddrL2); + vvv->addStretch(); + } + hBox = new HBox(vBox); + gBox = new QGroupBox("第三组寄存器"); + hBox->addWidget(gBox); + { + auto hh = new HBox(gBox); + hh->addSpacing(20); + auto vvv = new VBox(hh); + auto lb = new QLabel(" "); + vvv->addWidget(lb); + vvv->addSpacing(5); + lb = new QLabel("红芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(6); + lb = new QLabel("绿芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(7); + lb = new QLabel("蓝芯片: "); + vvv->addWidget(lb); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("高字节(hex) "); + vvv->addWidget(lb); + QRegExp regx("[A-Fa-f0-9]{2}"); + m_r_AddrH3= new QLineEdit("40"); + QValidator *validator = new QRegExpValidator(regx); + m_r_AddrH3->setValidator(validator); + vvv->addWidget(m_r_AddrH3); + m_g_AddrH3 = new QLineEdit("40") ; + m_g_AddrH3->setValidator(validator); + vvv->addWidget(m_g_AddrH3); + m_b_AddrH3 = new QLineEdit("40") ; + m_b_AddrH3->setValidator(validator); + vvv->addWidget(m_b_AddrH3); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("低字节(hex) "); + vvv->addWidget(lb); + + m_r_AddrL3= new QLineEdit("07"); + m_r_AddrL3->setValidator(validator); + vvv->addWidget(m_r_AddrL3); + m_g_AddrL3= new QLineEdit("07") ; + m_g_AddrL3->setValidator(validator); + vvv->addWidget(m_g_AddrL3); + m_b_AddrL3 = new QLineEdit("07") ; + m_b_AddrL3->setValidator(validator); + vvv->addWidget(m_b_AddrL3); + vvv->addStretch(); + + } + gBox = new QGroupBox("第四组寄存器"); + hBox->addWidget(gBox); + { + auto hh = new HBox(gBox); + hh->addSpacing(20); + auto vvv = new VBox(hh); + auto lb = new QLabel(" "); + vvv->addWidget(lb); + vvv->addSpacing(5); + lb = new QLabel("红芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(6); + lb = new QLabel("绿芯片: "); + vvv->addWidget(lb); + vvv->addSpacing(7); + lb = new QLabel("蓝芯片: "); + vvv->addWidget(lb); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("高字节(hex) "); + vvv->addWidget(lb); + QRegExp regx("[A-Fa-f0-9]{2}"); + m_r_AddrH4= new QLineEdit("00"); + QValidator *validator = new QRegExpValidator(regx); + m_r_AddrH4->setValidator(validator); + vvv->addWidget(m_r_AddrH4); + m_g_AddrH4 = new QLineEdit("00") ; + m_g_AddrH4->setValidator(validator); + vvv->addWidget(m_g_AddrH4); + m_b_AddrH4 = new QLineEdit("00") ; + m_b_AddrH4->setValidator(validator); + vvv->addWidget(m_b_AddrH4); + vvv->addStretch(); + + vvv = new VBox(hh); + lb = new QLabel("低字节(hex) "); + vvv->addWidget(lb); + + m_r_AddrL4= new QLineEdit("40"); + m_r_AddrL4->setValidator(validator); + vvv->addWidget(m_r_AddrL4); + m_g_AddrL4 = new QLineEdit("40") ; + m_g_AddrL4->setValidator(validator); + vvv->addWidget(m_g_AddrL4); + m_b_AddrL4 = new QLineEdit("40") ; + m_b_AddrL4->setValidator(validator); + vvv->addWidget(m_b_AddrL4); + vvv->addStretch(); + + } + //应用按钮 + hBox = new HBox(vBox); + auto btn = new QPushButton(tr("应用")); + btn->setProperty("ss","blue"); + hBox->addStretch(); + hBox->addWidget(btn); + hBox->addStretch(); + + connect(btn, &QPushButton::clicked, this, [=] { + expertWin->zrf_rcv_obj.b169_192[0]=m_r_AddrH1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[1]=m_r_AddrL1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[2]=m_r_AddrH2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[3]=m_r_AddrL2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[4]=m_r_AddrH3->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[5]=m_r_AddrL3->text().toInt(NULL, 16); + + + expertWin->zrf_rcv_obj.b169_192[6]=m_g_AddrH1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[7]=m_g_AddrL1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[8]=m_g_AddrH2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[9]=m_g_AddrL2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[10]=m_g_AddrH3->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[11]=m_g_AddrL3->text().toInt(NULL, 16); + + expertWin->zrf_rcv_obj.b169_192[12]=m_b_AddrH1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[13]=m_b_AddrL1->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[14]=m_b_AddrH2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[15]=m_b_AddrL2->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[16]=m_b_AddrH3->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[17]=m_b_AddrL3->text().toInt(NULL, 16); + + expertWin->zrf_rcv_obj.b169_192[18]=m_r_AddrH4->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[19]=m_r_AddrL4->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[20]=m_g_AddrH4->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[21]=m_g_AddrL4->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[22]=m_b_AddrH4->text().toInt(NULL, 16); + expertWin->zrf_rcv_obj.b169_192[23]=m_b_AddrL4->text().toInt(NULL, 16); + expertWin->classToBaseMsg(); + expertWin->SendBaseParam_zrf(); + }); + + btn = new QPushButton(tr("恢复默认值")); + btn->setProperty("ss","blue"); + hBox->addWidget(btn); + connect(btn, &QPushButton::clicked, this, [=] { + m_r_AddrH1->setText("1F"); + m_r_AddrL1->setText("70"); + m_g_AddrH1->setText("1F"); + m_g_AddrL1->setText("70"); + m_b_AddrH1->setText("1F"); + m_b_AddrL1->setText("70"); + + m_r_AddrH2->setText("7F"); + m_r_AddrL2->setText("FF"); + m_g_AddrH2->setText("7F"); + m_g_AddrL2->setText("FF"); + m_b_AddrH2->setText("7F"); + m_b_AddrL2->setText("FF"); + + m_r_AddrH3->setText("40"); + m_r_AddrL3->setText("07"); + m_g_AddrH3->setText("40"); + m_g_AddrL3->setText("07"); + m_b_AddrH3->setText("40"); + m_b_AddrL3->setText("07"); + + m_r_AddrH4->setText("00"); + m_r_AddrL4->setText("40"); + m_g_AddrH4->setText("00"); + m_g_AddrL4->setText("40"); + m_b_AddrH4->setText("00"); + m_b_AddrL4->setText("40"); + }); + + } + + + + init(); + +} +void icn_2053::init() +{ + m_r_AddrH1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[0],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrL1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[1],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrH2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[2],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrL2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[3],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrH3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[4],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrL3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[5],2,16,QLatin1Char('0')).toUpper()); + + + m_g_AddrH1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[6],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrL1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[7],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrH2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[8],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrL2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[9],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrH3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[10],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrL3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[11],2,16,QLatin1Char('0')).toUpper()); + + m_b_AddrH1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[12],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrL1->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[13],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrH2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[14],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrL2->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[15],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrH3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[16],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrL3->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[17],2,16,QLatin1Char('0')).toUpper()); + + m_r_AddrH4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[18],2,16,QLatin1Char('0')).toUpper()); + m_r_AddrL4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[19],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrH4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[20],2,16,QLatin1Char('0')).toUpper()); + m_g_AddrL4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[21],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrH4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[22],2,16,QLatin1Char('0')).toUpper()); + m_b_AddrL4->setText(QString("%1").arg(expertWin->zrf_rcv_obj.b169_192[23],2,16,QLatin1Char('0')).toUpper()); +} diff --git a/ledset/ic_ui/icn2053.h b/ledset/ic_ui/icn2053.h new file mode 100644 index 0000000..14be5d1 --- /dev/null +++ b/ledset/ic_ui/icn2053.h @@ -0,0 +1,24 @@ +#ifndef ICN2053_H +#define ICN2053_H + +#include +#include +#include "expertwin.h" +#include +class icn_2053: public BaseWin { + Q_OBJECT +public: + explicit icn_2053(ExpertWin *parent = nullptr); + ExpertWin *expertWin; + + QLineEdit *m_r_AddrH1,*m_g_AddrH1,*m_b_AddrH1,*m_r_AddrL1,*m_g_AddrL1,*m_b_AddrL1; + QLineEdit *m_r_AddrH2,*m_g_AddrH2,*m_b_AddrH2,*m_r_AddrL2,*m_g_AddrL2,*m_b_AddrL2; + QLineEdit *m_r_AddrH3,*m_g_AddrH3,*m_b_AddrH3,*m_r_AddrL3,*m_g_AddrL3,*m_b_AddrL3; + QLineEdit *m_r_AddrH4,*m_g_AddrH4,*m_b_AddrH4,*m_r_AddrL4,*m_g_AddrL4,*m_b_AddrL4; + QSpinBox *fdBright_r ,*fdBright_g,*fdBright_b; + QSlider * sliBright_r , *sliBright_g, *sliBright_b ; + QCheckBox *m_chk ; + void init(); +}; + +#endif // ICN2053_H diff --git a/ledset/ic_ui/normaleffectwin.cpp b/ledset/ic_ui/normaleffectwin.cpp new file mode 100644 index 0000000..3d2f4af --- /dev/null +++ b/ledset/ic_ui/normaleffectwin.cpp @@ -0,0 +1,293 @@ +#include "normaleffectwin.h" +#include "globalfunc.h" +#include "gutil/qgui.h" +#include +#include +#include +#include "efffrefr.h" +NormalEffectWin::NormalEffectWin(ExpertWin *parent) +{ + expertWin=parent; + resize(880, 220); + { + if(expertWin->m_iRcvCardType == enum_zrf) + { + auto vBox1=new VBox(this); + auto hh = new HBox(vBox1); + hh->addSpacing(20); + //第一列区域 + auto vvv = new VBox(hh); + //1.1.移位时钟频率 + auto hhh = new HBox(vvv); + auto lb = new QLabel(tr("DCLK频率:")); + hhh->addWidget(lb); + cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); hhh->addWidget(cbDCLKf); + //1.2.灰度级别 + hhh = new HBox(vvv); + lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); + cbGryLevel = new QComboBox(); cbGryLevel->addItem("无灰度"); cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级"); + cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级"); + cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级"); + cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级"); hhh->addWidget(cbGryLevel); + //1.3.刷新倍率 + hhh = new HBox(vvv); + lb = new QLabel(tr("刷新倍率:")); hhh->addWidget(lb); + freshBeiLv = new QComboBox(); freshBeiLv->addItem("1");freshBeiLv->addItem("2");freshBeiLv->addItem("3");freshBeiLv->addItem("4");freshBeiLv->addItem("5");freshBeiLv->addItem("6");freshBeiLv->addItem("7");freshBeiLv->addItem("8"); hhh->addWidget(freshBeiLv); + //1.4.换行时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); + spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); + //1.5.换行位置 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); + spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); + //1.6.行消隐时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("行消隐时间(ns):")); hhh->addWidget(lb); + spinLineXy = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineXy); + + //第二列区域 + hh->addSpacing(20); + vvv = new VBox(hh); + //2.1.无信号数据 + hhh = new HBox(vvv); + lb = new QLabel(tr("无信号数据:")); hhh->addWidget(lb); + cbNoSign = new QComboBox(); + cbNoSign->addItem("最后一帧画面");cbNoSign->addItem("黑屏"); hhh->addWidget(cbNoSign); + //2.2.显卡同步 + hhh = new HBox(vvv); + lb = new QLabel(tr("显卡同步")); hhh->addWidget(lb); + checkSyncXianKa = new QCheckBox; checkSyncXianKa->setChecked(true); hhh->addWidget(checkSyncXianKa); + //2.3.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("双卡备份")); hhh->addWidget(lb); + checkDoubleCopy = new QCheckBox; checkDoubleCopy->setChecked(false); hhh->addWidget(checkDoubleCopy); + //2.4.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("开屏渐亮")); hhh->addWidget(lb); + checkJianLiang = new QCheckBox; checkSyncXianKa->setChecked(false); hhh->addWidget(checkJianLiang); + //2.5.D信号为第二组时钟 + hhh = new HBox(vvv); + lb = new QLabel(tr("信号为第二组时钟")); hhh->addWidget(lb); + checkDsignalAsCLk = new QCheckBox; checkDsignalAsCLk->setChecked(false); hhh->addWidget(checkDsignalAsCLk); + + //更多设置 + hh->addStretch(); + vvv = new VBox(hh); + vvv->addStretch(); + hhh = new HBox(vvv); + auto btn = new QPushButton(tr("更多设置")); + btn->setProperty("ss","blue"); + hhh->addWidget(btn); + connect(btn, &QPushButton::clicked, this, [=] { + + }); + + + + vvv->addStretch(); + hh->addStretch(); + + vvv = new VBox(hh); + //分割线 + auto hh3 = new HBox(vvv); + QFrame * line2 = new QFrame(); + line2->setFrameShape(QFrame::VLine); + line2->setFrameShadow(QFrame::Sunken); + line2->setStyleSheet("background-color:#222;"); + hh3->addWidget(line2); + + //第三列区域 + vvv = new VBox(hh); + //3.1.DCLK相位 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); + cbDclkXw = new QComboBox(); cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度"); hhh->addWidget(cbDclkXw); + //3.2.DCLK占空比 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); + cbDclkZkb = new QComboBox(); cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%"); hhh->addWidget(cbDclkZkb); + //3.3.锁存STB相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存STB相位微调:")); hhh->addWidget(lb); + cbStb = new QComboBox(); cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟"); hhh->addWidget(cbStb); + //3.4.行信号DE相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号DE相位微调:")); hhh->addWidget(lb); + cbDE = new QComboBox(); cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟"); hhh->addWidget(cbDE); + //3.5.行信号ABC相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号ABC相位微调:")); hhh->addWidget(lb); + cbABC = new QComboBox(); cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟"); hhh->addWidget(cbABC); + //3.6.单口带载点数 + hhh = new HBox(vvv); + lb = new QLabel(tr("单口带载点数:")); hhh->addWidget(lb); + spinPointsOnePort = new QSpinBox; spinPointsOnePort->setRange(1, 999); hhh->addWidget(spinPointsOnePort); + hh->addSpacing(20); + //第四列区域 + vvv = new VBox(hh); + //4.1.消隐电平 + hhh = new HBox(vvv); + lb = new QLabel(tr("消隐电平:")); hhh->addWidget(lb); + cbXiaoYinDianPing= new QComboBox(); cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效"); hhh->addWidget(cbXiaoYinDianPing); + //4.2.锁存信号 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存信号:")); hhh->addWidget(lb); + cbSTB = new QComboBox(); cbSTB->addItem("正向");cbSTB->addItem("反向"); hhh->addWidget(cbSTB); + //4.3.行输出 + hhh = new HBox(vvv); + lb = new QLabel(tr("行输出:")); hhh->addWidget(lb); + cbSRowOut = new QComboBox(); cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效"); hhh->addWidget(cbSRowOut); + + //分割线 + auto hh1 = new HBox(vBox1); + QFrame * line = new QFrame(); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + line->setStyleSheet("background-color:#222;"); + hh1->addWidget(line); + + auto hh2=new HBox(vBox1); + //计算结果竖直信息区 + auto resultInfo = new HBox(hh2); + lb = new QLabel(tr("[普刷] 视觉刷新率:")); resultInfo->addWidget(lb); + float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); m_ctrlFreshRate = new QLabel(QString::number(freshLv1)); resultInfo->addWidget(m_ctrlFreshRate); + resultInfo->addStretch(); + lb = new QLabel(tr("亮度有效率:")); resultInfo->addWidget(lb); + float BrightYouXiaoLv1=Get_Eff(8,16); m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1)); resultInfo->addWidget(m_ctrlBrightEff); + resultInfo->addStretch(); + lb = new QLabel(tr("最小OE:")); resultInfo->addWidget(lb); + float minOe=Get_Eff(8,16); m_ctrlMinOE = new QLabel(QString::number(minOe)); resultInfo->addWidget(m_ctrlMinOE); + resultInfo->addStretch(); + + vBox1->addStretch(); + changeValueByEffectControler() ; + } + else if(expertWin->m_iRcvCardType == enum_xixun_sync) + { + + } + } + +} +void NormalEffectWin::changeValueByEffectControler() { + //spinbox + if(expertWin->m_iRcvCardType==enum_zrf) + { + qDebug()<<"changeValueByEffectControler"; + QObject::connect(spinLineNs, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "换行时间当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineWz, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "行位置当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineXy, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "消隐时间当前值:" << value; + expertWin->zrf_rcv_obj.b2=value; });// + QObject::connect(spinPointsOnePort, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "单口带载点数当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + + //combox + QObject::connect(cbDCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DLC频率当前值:" << value; + expertWin->zrf_rcv_obj.b18_3_0=value; });// + QObject::connect(cbDclkXw, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK相位当前值:" << value; + expertWin->zrf_rcv_obj.b19_7_4=value; });// + QObject::connect(cbDclkZkb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK占空比当前值:" << value; + expertWin->zrf_rcv_obj.b19_3_0=value; });// + QObject::connect(freshBeiLv, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "刷新倍率出当前值:" << value; + expertWin->zrf_rcv_obj.b21_7_5=value; });// + QObject::connect(cbGryLevel, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "灰度等级出当前值:" << value; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1){ + switch(value){ + case 0: expertWin->zrf_rcv_obj.b21_4_0=23; break;//正常4096 + case 1: expertWin->zrf_rcv_obj.b21_4_0=26; break;//正常8192 + case 2: expertWin->zrf_rcv_obj.b21_4_0=29; break;//正常16384 + case 3: expertWin->zrf_rcv_obj.b21_4_0=30; break;//正常32768 + case 4: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + default: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + } + + } + else + expertWin->zrf_rcv_obj.b21_4_0=value; });// + QObject::connect(cbNoSign, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "无信号输出出当前值:" << value; + expertWin->zrf_rcv_obj.b29_1_0=value; });// + QObject::connect(cbStb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号STB微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbDE, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号DE微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbABC, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号ABC微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbXiaoYinDianPing, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "消隐电平出当前值:" << value; + expertWin->zrf_rcv_obj.b1_5=value; });// + QObject::connect(cbSTB, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "锁存STB电平方向出当前值:" << value; + expertWin->zrf_rcv_obj.b0_6=value; });// + QObject::connect(cbSRowOut, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行输出电平出当前值:" << value; + expertWin->zrf_rcv_obj.b0_4=value; });// + //checkbox + QObject::connect(checkSyncXianKa, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "同步显卡出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b26_7=value ; + else expertWin->zrf_rcv_obj.b26_7=0b1; });// + QObject::connect(checkJianLiang, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "开屏渐亮出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_0=value ; + else expertWin->zrf_rcv_obj.b1_0=0b1; });// + QObject::connect(checkDoubleCopy, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "双备份出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_4=value ; + else expertWin->zrf_rcv_obj.b1_4=0b1; });// + QObject::connect(checkDsignalAsCLk, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "D信号作为第二组CLK出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_1=value ; + else expertWin->zrf_rcv_obj.b1_1=0b1; });// + } + +} +void NormalEffectWin::SetEffectControlerValueByClass() +{ + if(expertWin->m_iRcvCardType == enum_zrf) { + //spinbox + qDebug()<<"SetEffectControlerValueByClass"; + spinLineNs->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value(); + spinLineWz->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value(); + spinLineXy->setValue(expertWin->zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();// + spinPointsOnePort->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value(); + + //combox + cbDCLKf->setCurrentIndex(expertWin->zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex(); + cbDclkXw->setCurrentIndex(expertWin->zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex(); + cbDclkZkb->setCurrentIndex(expertWin->zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex(); + freshBeiLv->setCurrentIndex(expertWin->zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex(); + + int index=31; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1) + switch(expertWin->zrf_rcv_obj.b21_4_0){ + case 23: index=0; break;//正常4096 + case 26: index=1; break;//正常8192 + case 29: index=2; break;//正常16384 + case 30: index=3; break;//正常32768 + case 31: index=4; break;//正常65535 + default: index=4; break;//正常65535 + } + else + index=expertWin->zrf_rcv_obj.b21_4_0; + cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex(); + cbNoSign->setCurrentIndex(expertWin->zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex(); + cbStb->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex(); + cbDE->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex(); + cbABC->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex(); + cbXiaoYinDianPing->setCurrentIndex(expertWin->zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex(); + cbSTB->setCurrentIndex(expertWin->zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex(); + cbSRowOut->setCurrentIndex(expertWin->zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex(); + //checkbox + checkSyncXianKa->setChecked(expertWin->zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked(); + checkJianLiang->setChecked(expertWin->zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked(); + checkDoubleCopy->setChecked(expertWin->zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked(); + checkDsignalAsCLk->setChecked(expertWin->zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked(); + expertWin->SendBaseParam_zrf(); + } +} +void NormalEffectWin::reSetcontrolerByIcType(QString strIcName) +{ + if(strIcName == "ICN2053") + { + cbDCLKf->clear(); + cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); + } +} diff --git a/ledset/ic_ui/normaleffectwin.h b/ledset/ic_ui/normaleffectwin.h new file mode 100644 index 0000000..ccdeb19 --- /dev/null +++ b/ledset/ic_ui/normaleffectwin.h @@ -0,0 +1,26 @@ +#ifndef NORMALEFFECTWIN_H +#define NORMALEFFECTWIN_H +#include +#include +#include "expertwin.h" +#include +#include +#include +#include +#include +class NormalEffectWin: public QWidget +{ + Q_OBJECT +public: + NormalEffectWin(ExpertWin *parent = nullptr); + ExpertWin *expertWin; + QSpinBox *spinLineNs,*spinLineWz,*spinLineXy,*spinPointsOnePort; + QComboBox *cbDCLKf,*cbDclkXw, *cbDclkZkb,*freshBeiLv,*cbGryLevel,*cbNoSign,*cbStb,*cbDE,*cbABC,*cbXiaoYinDianPing,*cbSTB,*cbSRowOut; + QLabel * m_ctrlFreshRate,*m_ctrlBrightEff,*m_ctrlMinOE; + QCheckBox * checkSyncXianKa,*checkJianLiang,*checkDoubleCopy,*checkDsignalAsCLk; + void changeValueByEffectControler(); + void SetEffectControlerValueByClass(); + void reSetcontrolerByIcType(QString strIcName); +}; + +#endif // NORMALEFFECTWIN_H diff --git a/ledset/ic_ui/pwmeffectwin.cpp b/ledset/ic_ui/pwmeffectwin.cpp new file mode 100644 index 0000000..1e2d035 --- /dev/null +++ b/ledset/ic_ui/pwmeffectwin.cpp @@ -0,0 +1,321 @@ +#include "pwmeffectwin.h" +#include "globalfunc.h" +#include "gutil/qgui.h" +#include +#include +#include +#include "efffrefr.h" +#include "ic_ui/icn2053.h" +PwmEffectWin::PwmEffectWin(ExpertWin *parent):expertWin(parent) +{ + resize(880, 220); + { + if(expertWin->m_iRcvCardType == enum_zrf) + { + auto vBox1=new VBox(this); + auto hh = new HBox(vBox1); + hh->addSpacing(20); + //第一列区域 + auto vvv = new VBox(hh); + //1.1.移位时钟频率 + auto hhh = new HBox(vvv); + auto lb = new QLabel(tr("移位时钟:")); + hhh->addWidget(lb); + cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); hhh->addWidget(cbDCLKf); + //1.2.GCLK频率 + hhh = new HBox(vvv); + lb = new QLabel(tr("灰度时钟:")); + hhh->addWidget(lb); + cbGCLKf = new QComboBox(); + cbGCLKf->addItem("25M");cbGCLKf->addItem("20.83M");cbGCLKf->addItem("17.86M");cbGCLKf->addItem("15.63M");cbGCLKf->addItem("13.89M");cbGCLKf->addItem("12.5M");cbGCLKf->addItem("11.36M");cbGCLKf->addItem("10.42M");cbGCLKf->addItem("9.62M"); + hhh->addWidget(cbGCLKf); + //1.3.灰度级别 + hhh = new HBox(vvv); + lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); + cbGryLevel = new QComboBox(); cbGryLevel->addItem("无灰度"); cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级"); + cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级"); + cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级"); + cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级"); hhh->addWidget(cbGryLevel); + //1.4.刷新倍率 + hhh = new HBox(vvv); + lb = new QLabel(tr("刷新倍率:")); hhh->addWidget(lb); + freshBeiLv = new QComboBox(); freshBeiLv->addItem("20");freshBeiLv->addItem("24");freshBeiLv->addItem("28");freshBeiLv->addItem("32");freshBeiLv->addItem("36");freshBeiLv->addItem("40");freshBeiLv->addItem("44");freshBeiLv->addItem("48");freshBeiLv->addItem("64"); hhh->addWidget(freshBeiLv); + //1.5.换行时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); + spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); + //1.6.换行位置 + hhh = new HBox(vvv); + lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); + spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); + + //第二列区域 + hh->addSpacing(20); + vvv = new VBox(hh); + //2.1.无信号数据 + hhh = new HBox(vvv); + lb = new QLabel(tr("无信号数据:")); hhh->addWidget(lb); + cbNoSign = new QComboBox(); + cbNoSign->addItem("最后一帧画面");cbNoSign->addItem("黑屏"); hhh->addWidget(cbNoSign); + //2.2.行消隐时间 + hhh = new HBox(vvv); + lb = new QLabel(tr("行消隐时间(ns):")); hhh->addWidget(lb); + spinLineXy = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineXy); + //2.3.显卡同步 + hhh = new HBox(vvv); + lb = new QLabel(tr("显卡同步")); hhh->addWidget(lb); + checkSyncXianKa = new QCheckBox; checkSyncXianKa->setChecked(true); hhh->addWidget(checkSyncXianKa); + //2.4.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("双卡备份")); hhh->addWidget(lb); + checkDoubleCopy = new QCheckBox; checkDoubleCopy->setChecked(false); hhh->addWidget(checkDoubleCopy); + //2.5.开屏渐亮 + hhh = new HBox(vvv); + lb = new QLabel(tr("开屏渐亮")); hhh->addWidget(lb); + checkJianLiang = new QCheckBox; checkSyncXianKa->setChecked(false); hhh->addWidget(checkJianLiang); + //2.6.D信号为第二组时钟 + hhh = new HBox(vvv); + lb = new QLabel(tr("信号为第二组时钟")); hhh->addWidget(lb); + checkDsignalAsCLk = new QCheckBox; checkDsignalAsCLk->setChecked(false); hhh->addWidget(checkDsignalAsCLk); + + //更多设置 + hh->addStretch(); + vvv = new VBox(hh); + vvv->addStretch(); + hhh = new HBox(vvv); + auto btn = new QPushButton(tr("更多设置")); + btn->setProperty("ss","blue"); + hhh->addWidget(btn); + connect(btn, &QPushButton::clicked, this, [=] { + (new icn_2053(expertWin))->show(); + }); + + + + vvv->addStretch(); + hh->addStretch(); + + vvv = new VBox(hh); + //分割线 + auto hh3 = new HBox(vvv); + QFrame * line2 = new QFrame(); + line2->setFrameShape(QFrame::VLine); + line2->setFrameShadow(QFrame::Sunken); + line2->setStyleSheet("background-color:#222;"); + hh3->addWidget(line2); + + //第三列区域 + vvv = new VBox(hh); + //3.1.DCLK相位 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); + cbDclkXw = new QComboBox(); cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度"); hhh->addWidget(cbDclkXw); + //3.2.DCLK占空比 + hhh = new HBox(vvv); + lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); + cbDclkZkb = new QComboBox(); cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%"); hhh->addWidget(cbDclkZkb); + //3.3.锁存STB相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存STB相位微调:")); hhh->addWidget(lb); + cbStb = new QComboBox(); cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟"); hhh->addWidget(cbStb); + //3.4.行信号DE相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号DE相位微调:")); hhh->addWidget(lb); + cbDE = new QComboBox(); cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟"); hhh->addWidget(cbDE); + //3.5.行信号ABC相位微调 + hhh = new HBox(vvv); + lb = new QLabel(tr("行信号ABC相位微调:")); hhh->addWidget(lb); + cbABC = new QComboBox(); cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟"); hhh->addWidget(cbABC); + //3.6.单口带载点数 + hhh = new HBox(vvv); + lb = new QLabel(tr("单口带载点数:")); hhh->addWidget(lb); + spinPointsOnePort = new QSpinBox; spinPointsOnePort->setRange(1, 999); hhh->addWidget(spinPointsOnePort); + hh->addSpacing(20); + //第四列区域 + vvv = new VBox(hh); + //4.1.消隐电平 + hhh = new HBox(vvv); + lb = new QLabel(tr("消隐电平:")); hhh->addWidget(lb); + cbXiaoYinDianPing= new QComboBox(); cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效"); hhh->addWidget(cbXiaoYinDianPing); + //4.2.锁存信号 + hhh = new HBox(vvv); + lb = new QLabel(tr("锁存信号:")); hhh->addWidget(lb); + cbSTB = new QComboBox(); cbSTB->addItem("正向");cbSTB->addItem("反向"); hhh->addWidget(cbSTB); + //4.3.行输出 + hhh = new HBox(vvv); + lb = new QLabel(tr("行输出:")); hhh->addWidget(lb); + cbSRowOut = new QComboBox(); cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效"); hhh->addWidget(cbSRowOut); + //4.5.GCLK相位 + hhh = new HBox(vvv); + lb = new QLabel(tr("GCLK相位:")); hhh->addWidget(lb); + spinGclkXw = new QSpinBox; spinGclkXw->setRange(20, 80); hhh->addWidget(spinGclkXw); + //4.6.GCLK占空比 + hhh = new HBox(vvv); + lb = new QLabel(tr("GCLK占空比:")); hhh->addWidget(lb); + spinGclkZkb = new QSpinBox; spinGclkZkb->setRange(20, 80); hhh->addWidget(spinGclkZkb); + + //分割线 + auto hh1 = new HBox(vBox1); + QFrame * line = new QFrame(); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + line->setStyleSheet("background-color:#222;"); + hh1->addWidget(line); + + auto hh2=new HBox(vBox1); + //计算结果竖直信息区 + auto resultInfo = new HBox(hh2); + lb = new QLabel(tr("[PWM]视觉刷新率:")); resultInfo->addWidget(lb); + float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); m_ctrlFreshRate = new QLabel(QString::number(freshLv1)); resultInfo->addWidget(m_ctrlFreshRate); + resultInfo->addStretch(); + lb = new QLabel(tr("亮度有效率:")); resultInfo->addWidget(lb); + float BrightYouXiaoLv1=Get_Eff(8,16); m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1)); resultInfo->addWidget(m_ctrlBrightEff); + resultInfo->addStretch(); + lb = new QLabel(tr("最小OE:")); resultInfo->addWidget(lb); + float minOe=Get_Eff(8,16); m_ctrlMinOE = new QLabel(QString::number(minOe)); resultInfo->addWidget(m_ctrlMinOE); + resultInfo->addStretch(); + + vBox1->addStretch(); + changeValueByEffectControler(); + } + else if(expertWin->m_iRcvCardType == enum_xixun_sync) + { + + } + } +} +void PwmEffectWin::changeValueByEffectControler() { + //spinbox + if(expertWin->m_iRcvCardType==enum_zrf) + { + QObject::connect(spinGclkXw, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK相位当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinGclkZkb, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK占空比当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineNs, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "换行时间当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineWz, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "行位置当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(spinLineXy, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "消隐时间当前值:" << value; + expertWin->zrf_rcv_obj.b2=value; });// + QObject::connect(spinPointsOnePort, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "单口带载点数当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + + //combox + QObject::connect(cbDCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DLC频率当前值:" << value; + expertWin->zrf_rcv_obj.b18_3_0=value; });// + QObject::connect(cbDclkXw, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK相位当前值:" << value; + expertWin->zrf_rcv_obj.b19_7_4=value; });// + QObject::connect(cbDclkZkb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK占空比当前值:" << value; + expertWin->zrf_rcv_obj.b19_3_0=value; });// + QObject::connect(freshBeiLv, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "刷新倍率出当前值:" << value; + expertWin->zrf_rcv_obj.b21_7_5=value; });// + QObject::connect(cbGCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "GCLK周期出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbGryLevel, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "灰度等级出当前值:" << value; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1){ + switch(value){ + case 0: expertWin->zrf_rcv_obj.b21_4_0=23; break;//正常4096 + case 1: expertWin->zrf_rcv_obj.b21_4_0=26; break;//正常8192 + case 2: expertWin->zrf_rcv_obj.b21_4_0=29; break;//正常16384 + case 3: expertWin->zrf_rcv_obj.b21_4_0=30; break;//正常32768 + case 4: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + default: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535 + } + + } + else + expertWin->zrf_rcv_obj.b21_4_0=value; });// + QObject::connect(cbNoSign, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "无信号输出出当前值:" << value; + expertWin->zrf_rcv_obj.b29_1_0=value; });// + QObject::connect(cbStb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号STB微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbDE, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号DE微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbABC, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号ABC微调出当前值:" << value; + expertWin->zrf_rcv_obj.b193=value; }); + QObject::connect(cbXiaoYinDianPing, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "消隐电平出当前值:" << value; + expertWin->zrf_rcv_obj.b1_5=value; });// + QObject::connect(cbSTB, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "锁存STB电平方向出当前值:" << value; + expertWin->zrf_rcv_obj.b0_6=value; });// + QObject::connect(cbSRowOut, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行输出电平出当前值:" << value; + expertWin->zrf_rcv_obj.b0_4=value; });// + //checkbox + QObject::connect(checkSyncXianKa, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "同步显卡出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b26_7=value ; + else expertWin->zrf_rcv_obj.b26_7=0b1; });// + QObject::connect(checkJianLiang, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "开屏渐亮出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_0=value ; + else expertWin->zrf_rcv_obj.b1_0=0b1; });// + QObject::connect(checkDoubleCopy, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "双备份出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_4=value ; + else expertWin->zrf_rcv_obj.b1_4=0b1; });// + QObject::connect(checkDsignalAsCLk, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "D信号作为第二组CLK出当前值:" << value; + if(value==0) expertWin->zrf_rcv_obj.b1_1=value ; + else expertWin->zrf_rcv_obj.b1_1=0b1; });// + } + +} +void PwmEffectWin::SetEffectControlerValueByClass() +{ + if(expertWin->m_iRcvCardType == enum_zrf) { + //spinbox + spinGclkXw->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "GCLK相位当前值:" << spinGclkXw->value(); + spinGclkZkb->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "GCLK占空比当前值:" << spinGclkZkb->value(); + spinLineNs->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value(); + spinLineWz->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value(); + spinLineXy->setValue(expertWin->zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();// + spinPointsOnePort->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value(); + + //combox + cbDCLKf->setCurrentIndex(expertWin->zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex(); + cbDclkXw->setCurrentIndex(expertWin->zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex(); + cbDclkZkb->setCurrentIndex(expertWin->zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex(); + freshBeiLv->setCurrentIndex(expertWin->zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex(); + cbGCLKf->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "GCLK周期出当前值:" << cbGCLKf->currentIndex(); + + int index=31; + if(expertWin->zrf_rcv_obj.m_pwmFlag==1) + switch(expertWin->zrf_rcv_obj.b21_4_0){ + case 23: index=0; break;//正常4096 + case 26: index=1; break;//正常8192 + case 29: index=2; break;//正常16384 + case 30: index=3; break;//正常32768 + case 31: index=4; break;//正常65535 + default: index=4; break;//正常65535 + } + else + index=expertWin->zrf_rcv_obj.b21_4_0; + cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex(); + cbNoSign->setCurrentIndex(expertWin->zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex(); + cbStb->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex(); + cbDE->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex(); + cbABC->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex(); + cbXiaoYinDianPing->setCurrentIndex(expertWin->zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex(); + cbSTB->setCurrentIndex(expertWin->zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex(); + cbSRowOut->setCurrentIndex(expertWin->zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex(); + //checkbox + checkSyncXianKa->setChecked(expertWin->zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked(); + checkJianLiang->setChecked(expertWin->zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked(); + checkDoubleCopy->setChecked(expertWin->zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked(); + checkDsignalAsCLk->setChecked(expertWin->zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked(); + expertWin->SendBaseParam_zrf(); + } +} +void PwmEffectWin::reSetcontrolerByIcType(QString strIcName) +{//不同的pwm芯片的配置参数不同,控件支持的值的范围也不同,需要根据IC名称重新初始化控件内容 + if(strIcName == "ICN2053") + { + cbDCLKf->clear(); + cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); + cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); + cbGCLKf->clear(); + cbGCLKf->addItem("25M");cbGCLKf->addItem("20.83M");cbGCLKf->addItem("17.86M");cbGCLKf->addItem("15.63M");cbGCLKf->addItem("13.89M");cbGCLKf->addItem("12.5M");cbGCLKf->addItem("11.36M");cbGCLKf->addItem("10.42M");cbGCLKf->addItem("9.62M"); + + cbGryLevel->clear(); + cbGryLevel->addItem("正常16384"); + freshBeiLv->clear(); + freshBeiLv->addItem("8"); + } +} diff --git a/ledset/ic_ui/pwmeffectwin.h b/ledset/ic_ui/pwmeffectwin.h new file mode 100644 index 0000000..325665b --- /dev/null +++ b/ledset/ic_ui/pwmeffectwin.h @@ -0,0 +1,26 @@ +#ifndef PWMEFFECTWIN_H +#define PWMEFFECTWIN_H +#include +#include +#include "expertwin.h" +#include +#include +#include +#include +#include +class PwmEffectWin: public QWidget +{ + Q_OBJECT +public: + PwmEffectWin(ExpertWin *parent = nullptr); + ExpertWin *expertWin; + QSpinBox *spinGclkXw,*spinGclkZkb,*spinLineNs,*spinLineWz,*spinLineXy,*spinPointsOnePort; + QComboBox *cbDCLKf,*cbDclkXw, *cbDclkZkb,*freshBeiLv,*cbGCLKf,*cbGryLevel,*cbNoSign,*cbStb,*cbDE,*cbABC,*cbXiaoYinDianPing,*cbSTB,*cbSRowOut; + QLabel * m_ctrlFreshRate,*m_ctrlBrightEff,*m_ctrlMinOE; + QCheckBox * checkSyncXianKa,*checkJianLiang,*checkDoubleCopy,*checkDsignalAsCLk; + void changeValueByEffectControler(); + void SetEffectControlerValueByClass(); + void reSetcontrolerByIcType(QString strIcName); +}; + +#endif // PWMEFFECTWIN_H diff --git a/ledset/imgs/cascade.png b/ledset/imgs/cascade.png new file mode 100644 index 0000000000000000000000000000000000000000..475622bd52d3a00066c0feba45f062815feedfd1 GIT binary patch literal 9389 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/close.png imgs/macos-max.png imgs/macos-max1.png + imgs/cascade.png + imgs/mainsend.png + imgs/rcv.png