#include "headspacingsheetdialog.h" #include "ui_headspacingsheetdialog.h" #define ROW_NUM 10 //按钮行数 #define COLUMN_NUM 5 //按钮列数 HeadSpacingSheetDialog::HeadSpacingSheetDialog(QWidget *parent) : QDialog(parent), ui(new Ui::HeadSpacingSheetDialog) { ui->setupUi(this); setWindowFlags (Qt::Window | Qt::FramelessWindowHint); setWindowModality(Qt::ApplicationModal); initWidget(); initControl(); memset(&m_data, 0, sizeof(DsrHeadEx62)); m_dataNums = 0; refreshPageUi(); } HeadSpacingSheetDialog::~HeadSpacingSheetDialog() { delete ui; } void HeadSpacingSheetDialog::refreshPageUi() { //清空全部按钮数据 foreach (QPushButton* button, m_sheetBtnList) { button->setText(""); button->setEnabled(false); button->setVisible(false); } //计算页码范围 m_pageNums = m_dataNums / ROW_NUM;//向上取整 总页数 m_pageNums = (m_dataNums % ROW_NUM == 0) ? m_pageNums : m_pageNums + 1; if (m_curPages > m_pageNums)// 当前页 { m_curPages = m_pageNums; } if (m_curPages < 1) { m_curPages = 1; } //刷新列值 for(int i = 0; i < ROW_NUM; i++) { int rowNum = i + 1 + (m_curPages -1) * ROW_NUM; //如果超过最大值则不显示 if(rowNum > m_dataNums){ m_sheetVLabelList[i]->setVisible(false); } else{ m_sheetVLabelList[i]->setText(QString("%1").arg(rowNum)); m_sheetVLabelList[i]->setFont(fontNormal_1); m_sheetVLabelList[i]->setVisible(true); m_sheetVLabelList[i]->setStyleSheet(LABELWHITESTYLE); m_sheetVLabelList[i]->setAlignment(Qt::AlignRight); m_sheetVLabelList[i]->setAlignment(Qt::AlignCenter); } } //显示已存在的数据 for(int i = 0; i < ROW_NUM; i++){ int labelIdx = (m_curPages - 1) * ROW_NUM + i; if(labelIdx > m_dataNums - 1) { //超过机头间距总段数 break; } else { m_sheetBtnList[i * COLUMN_NUM + 0 ]->setText(charToQString(m_data.headEnableSpacing[labelIdx].iswork)); m_sheetBtnList[i * COLUMN_NUM + 1 ]->setText(intDiv10(m_data.headEnableSpacing[labelIdx].distance1_2)); m_sheetBtnList[i * COLUMN_NUM + 2 ]->setText(intDiv10(m_data.headEnableSpacing[labelIdx].distance1_3)); m_sheetBtnList[i * COLUMN_NUM + 3 ]->setText(intDiv10(m_data.headEnableSpacing[labelIdx].distance1_4)); m_sheetBtnList[i * COLUMN_NUM + 4 ]->setText(intDiv10(m_data.headEnableSpacing[labelIdx].distance1_5)); m_sheetBtnList[i * COLUMN_NUM + 0 ]->setEnabled(true); m_sheetBtnList[i * COLUMN_NUM + 1 ]->setEnabled(true); m_sheetBtnList[i * COLUMN_NUM + 2 ]->setEnabled(true); m_sheetBtnList[i * COLUMN_NUM + 3 ]->setEnabled(true); m_sheetBtnList[i * COLUMN_NUM + 4 ]->setEnabled(true); m_sheetBtnList[i * COLUMN_NUM + 0 ]->setVisible(true); m_sheetBtnList[i * COLUMN_NUM + 1 ]->setVisible(true); m_sheetBtnList[i * COLUMN_NUM + 2 ]->setVisible(true); m_sheetBtnList[i * COLUMN_NUM + 3 ]->setVisible(true); m_sheetBtnList[i * COLUMN_NUM + 4 ]->setVisible(true); } } // 页信息 QString str = tr("pageNum: ") + QString("%1/%2").arg(m_curPages).arg(m_pageNums);//页数: ui->labelPageNum->setText(str); } void HeadSpacingSheetDialog::setTypeLogo(QString tStyle) { ui->buttonTypeLogo->setUnPreBtnLogo(tStyle); } void HeadSpacingSheetDialog::setMainTitle(QString str) { ui->labelMainTitle->setText(str); } void HeadSpacingSheetDialog::setSubTitle(QString str) { ui->labelSubTitle->setText(str); } void HeadSpacingSheetDialog::on_buttonPgUp_clicked() { m_curPages--; refreshPageUi(); } void HeadSpacingSheetDialog::slotSheetBtnClicked() { MyButton *button = (MyButton*) this->sender() ; int index = m_sheetBtnList.indexOf(button); int rowIndex = index / COLUMN_NUM; int column = index % COLUMN_NUM; // qDebug()<< QString("点击了第%1个按钮").arg(index); // qDebug()<< rowIndex ; //行 // qDebug()<< column; //列 int listIndex = rowIndex + (m_curPages - 1) * ROW_NUM; qDebug()<< "listIndex:" << listIndex; if(column == 0) //机头开关设置 按bit位 { //获取bit位的数据,存入内存 McHeadDialog mcHeadDialog(this); mcHeadDialog.setChar(m_data.headEnableSpacing[listIndex].iswork); int result = mcHeadDialog.exec(); if(result == 1) { unsigned char headIsWork = mcHeadDialog.getChar(); m_data.headEnableSpacing[listIndex].iswork = headIsWork; //修改内存的值 button->setText(charToQString(headIsWork)); } } else { //机头间距参数设置 NumerInputDialog ndlg(this); ndlg.setTitleStr("跨步距离"); ndlg.setUnitStr("0.1mm"); ndlg.setValueAndRange((int)button->text().toDouble()*10, 0, 50000, 1); // 界面中的数*10 为内存中的实际值 int rslt = ndlg.exec(); if(rslt == 1){ s32 val = ndlg.getValue(); // 0.1mm 界面输入500.1 此时的数是5001,但是界面上还是需要显示500.1 //修改界面的值 button->setText(intDiv10(val)); //修改内存的值 HeadTable *item = &m_data.headEnableSpacing[listIndex]; switch (column) { case 1: item->distance1_2 = val; break; case 2: item->distance1_3 = val; break; case 3: item->distance1_4 = val; break; case 4: item->distance1_5 = val; break; case 5: item->distance1_6 = val; break; case 6: item->distance1_7 = val; break; case 7: item->distance1_8 = val; break; default: break; } } } } void HeadSpacingSheetDialog::setHeadData(DsrHeadEx62 data) { m_data = data; m_curPages = 1; refreshPageUi(); } DsrHeadEx62 HeadSpacingSheetDialog::getHeadData() { return m_data; } void HeadSpacingSheetDialog::initDsrFileInfo(QString fileName) { QFileInfo fileInfo(fileName); QString suffer = fileInfo.suffix().toUpper(); if(suffer != "DSR"){ return ; } //根据文件名加载 m_fileName = fileName; DataFileDsr dsr; dsr.initFile(m_fileName); dsr.convertDataToEmbAbs(); m_data = dsr.get62ExHead(); m_dataNums = dsr.getStepNums(); refreshPageUi(); } void HeadSpacingSheetDialog::setStepNums(int dataNums) { m_dataNums = dataNums; refreshPageUi(); } QString HeadSpacingSheetDialog::detectUsb() { QString usbPath = ""; #ifdef Q_OS_LINUX QDir dir(LINUXUSBPATH); if(!dir.exists()) { usbPath = ""; } else { usbPath = LINUXUSBPATH; } #endif #ifdef Q_OS_WIN QFileInfoList list = QDir::drives(); for(int i = 0; iframeSheet); m_sheetBtnList.append(buttonSheet); connect(buttonSheet, SIGNAL(clicked()), this, SLOT(slotSheetBtnClicked()) ); } } for(int i = 0; i < COLUMN_NUM; i++) { QLabel *labelH = new QLabel(this); labelH->setAlignment(Qt::AlignCenter); //设置居中 m_sheetHLabelList.append(labelH); } for(int i = 0; i < ROW_NUM; i++) { QLabel *labelV = new QLabel(this); m_sheetVLabelList.append(labelV); } } void HeadSpacingSheetDialog::initControl() { //根据不同分辨率设置控件的位置和尺寸 switch (g_emResolut) { case resolution1910: initResolution1910(); break; case resolution1006: initResolution1006(); break; default: this->resize(1920,1080); break; } initControlStyle();//初始化窗体控件样式 } void HeadSpacingSheetDialog::initResolution1910() { double factoryX = 1.875; //缩放比例系数 double factoryY = 1.8; this->resize(1024*factoryX,600*factoryY); ui->buttonTypeLogo->setGeometry(25 *factoryX, 30*factoryY,60*factoryX,60*factoryY); ui->labelMainTitle->setGeometry(100 *factoryX,30*factoryY,200*factoryX,24*factoryY); ui->labelSubTitle->setGeometry(130 *factoryX,64*factoryY,240*factoryX,21*factoryY); ui->frameBack->setGeometry(0 *factoryX,0*factoryY,1024*factoryX,600*factoryY); ui->frameSheet->setGeometry(10 *factoryX,120*factoryY,1000*factoryX,420*factoryY); ui->labelPageNum->setGeometry(20*factoryX,550*factoryY,300*factoryX,45*factoryY); ui->framePageBtn->setGeometry(489*factoryX,545*factoryY,600*factoryX,40*factoryY); ui->buttonPgUp->setGeometry(106*factoryX,0*factoryY,96*factoryX,40*factoryY); ui->buttonPgDn->setGeometry(212*factoryX,0*factoryY,96*factoryX,40*factoryY); ui->buttonOk->setGeometry(318*factoryX,0*factoryY,96*factoryX,40*factoryY); ui->buttonCancel->setGeometry(424*factoryX,0*factoryY,96*factoryX,40*factoryY); ui->buttonParaExport->setGeometry(950*factoryX,40*factoryY,50*factoryX,50*factoryY); ui->buttonParaImport->setGeometry(880*factoryX,40*factoryY,50*factoryX,50*factoryY); //label样式 ui->labelMainTitle->setFont(fontBold_1); ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE); ui->labelSubTitle->setFont(fontNormal_1); ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE); ui->labelPageNum->setFont(fontNormal_1); ui->labelPageNum->setStyleSheet(LABELWHITESTYLE); for(int i = 0; i < ROW_NUM; i++) { for(int j = 0; j < COLUMN_NUM; j++) { m_sheetBtnList[i*COLUMN_NUM+j]->setGeometry((100+j*160)*factoryX , (30+i*38) *factoryY, 150*factoryX, 32*factoryY); } } for(int i = 0; i < COLUMN_NUM; i++) { m_sheetHLabelList[i]->setGeometry((180 + i*156) *factoryX, 94*factoryY, 70*factoryX, 40*factoryY); } for(int i = 0; i < ROW_NUM; i++) { m_sheetVLabelList[i]->setGeometry(30*factoryX, (149+i*38)*factoryY, 72*factoryX, 32*factoryY); } } void HeadSpacingSheetDialog::initResolution1006() { this->resize(1024,600); ui->buttonTypeLogo->setGeometry(25,30,60,60); ui->labelMainTitle->setGeometry(100,30,200,24); ui->labelSubTitle->setGeometry(130,64,240,21); ui->frameBack->setGeometry(0,0,1024,600); ui->frameSheet->setGeometry(10,120,1000,420); ui->labelPageNum->setGeometry(20,550,300,45); ui->framePageBtn->setGeometry(489,545,600,40); ui->buttonPgUp->setGeometry(106,0,96,40); ui->buttonPgDn->setGeometry(212,0,96,40); ui->buttonOk->setGeometry(318,0,96,40); ui->buttonCancel->setGeometry(424,0,96,40); ui->buttonParaExport->setGeometry(950,40,50,50); ui->buttonParaImport->setGeometry(880,40,50,50); for(int i = 0; i < ROW_NUM; i++) { for(int j = 0; j < COLUMN_NUM; j++) { m_sheetBtnList[i*COLUMN_NUM+j]->setGeometry(100+j*160, 30+i*38, 150, 32); } } for(int i = 0; i < COLUMN_NUM; i++) { m_sheetHLabelList[i]->setGeometry(180 + i*156, 94, 70, 40); } for(int i = 0; i < ROW_NUM; i++) { m_sheetVLabelList[i]->setGeometry(30, 149+i*38, 72, 32); } } void HeadSpacingSheetDialog::initControlStyle() { SetControlStyle setControlStyle; setControlStyle.setUiName(this->objectName()); ui->labelPageNum->setText(tr("PageNum: 0/0"));//页数: 0/0 ui->frameBack->setStyleSheet(TRANSPARENTSTYLE); QString str = setControlStyle.getStyleSheet(this->objectName()); ui->frameBack->setStyleSheet(str); //四个按钮样式表一样 ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2); ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12); ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2); ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12); ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2); ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12); ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2); ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12); ui->buttonParaExport->setGreenGradientBottomStyle(BORDER_RADIUS1); ui->buttonParaExport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonParaExport->objectName())); ui->buttonParaImport->setGreenGradientBottomStyle(BORDER_RADIUS1); ui->buttonParaImport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonParaImport->objectName())); for(int i = 0; i < COLUMN_NUM; i++) { if(i == 0){ m_sheetHLabelList[i]->setText(QString("1")); } else { m_sheetHLabelList[i]->setText(QString("1-%1").arg(i+1)); } m_sheetHLabelList[i]->setFont(fontNormal_1); m_sheetHLabelList[i]->setStyleSheet(LABELWHITESTYLE); m_sheetHLabelList[i]->setAlignment(Qt::AlignCenter); m_sheetHLabelList[i]->setAlignment(Qt::AlignBottom); } for(int i = 0; i < ROW_NUM; i++) { m_sheetVLabelList[i]->setText(QString("%1").arg(i+1)); m_sheetVLabelList[i]->setFont(fontNormal_1); m_sheetVLabelList[i]->setStyleSheet(LABELWHITESTYLE); m_sheetVLabelList[i]->setAlignment(Qt::AlignRight); m_sheetVLabelList[i]->setAlignment(Qt::AlignCenter); } ui->frameSheet->setStyleSheet(TRANSPARENTSTYLE); for(int i = 0; i < ROW_NUM; i++) { for(int j = 0; j < COLUMN_NUM; j++) { m_sheetBtnList[i*COLUMN_NUM+j]->setBlueGradientBottomStyle("5"); m_sheetBtnList[i*COLUMN_NUM+j]->setFont(fontNormal_1); } } } void HeadSpacingSheetDialog::on_buttonPgDn_clicked() { m_curPages++; refreshPageUi(); } void HeadSpacingSheetDialog::on_buttonOk_clicked() { //数据保存到源文件 QFile file(m_fileName); if(file.open(QIODevice::ReadWrite)) { QByteArray fileData(sizeof(DsrHeadEx62), 0); memcpy(fileData.data(), (char*)(&m_data), sizeof(DsrHeadEx62)); file.seek(sizeof(DsrHead)); qDebug()<<"HeadSpacingSheetDialog::on_buttonOk_clicked: file.pos:"< charBit(data); std::string stdStr = to_1string(charBit); reverse(stdStr.begin(),stdStr.end()); QString bitStr = QString::fromStdString(stdStr); return bitStr.left(5); }