#include "formmultiheads.h" #include "ui_formmultiheads.h" #include #include #include #include "newheaddialog.h" #include "formhead.h" #include "qtcommonclass.h" extern int g_iRows; extern int g_iCols; extern int g_iColsWidth; extern int g_iRowsHight; extern int g_iFixedWidth; extern int g_iFixedHeight; extern double g_dPixelPerCm;//每厘米像素数 FormMultiHeads::FormMultiHeads(QWidget *parent) : QWidget(parent), ui(new Ui::FormMultiHeads) { ui->setupUi(this); //加载样式 loadStyle(":/qrc/qss/flatgray.css"); //------------------------------------- // 强制使用Qt渲染引擎 //QApplication::setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles, true); //取消全局样式表 // ui->tableWidget->setStyleSheet(""); // ui->tableWidget->setAutoFillBackground(true); //ui->tableWidget->hide(); //隐藏网格线 ui->tableWidget->setShowGrid(false); // //设置样式表,不显示竖直边框 // ui->tableWidget->setStyleSheet( "QTableView::item {border-left: 0px solid black;} \ // QTableView::item:selected {border-left: 0px solid black;}\ // QTableView::item {border-right: 0px solid black;} \ // QTableView::item:selected {border-right: 0px solid black;}"); // ui->tableWidget->verticalHeader()->hide(); //行 ui->tableWidget->horizontalHeader()->hide(); //列 ui->tableWidget->verticalHeader()->setFixedWidth(0);//标题栏宽度 ui->tableWidget->horizontalHeader()->setFixedHeight(0);//标题栏高度 ui->tableWidget->setColumnCount(1); //动态设置列数 ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//最后一列铺满最后 //标题 QTableWidgetItem *headerItem = new QTableWidgetItem(""); ui->tableWidget->setHorizontalHeaderItem(0, headerItem); //我们让一列也可以滑动 ui->tableWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); ui->tableWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); // 设置右键菜单策略 ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint))); // 在窗口构造函数中 //ui->tableWidget->installEventFilter(this); } FormMultiHeads::~FormMultiHeads() { delete ui; } void FormMultiHeads::loadStyle(const QString &qssFile) { //加载样式表 QString qss; QFile file(qssFile); if (file.open(QFile::ReadOnly)) { //用QTextStream读取样式文件不用区分文件编码 带bom也行 QStringList list; QTextStream in(&file); //in.setCodec("utf-8"); while (!in.atEnd()) { QString line; in >> line; list << line; } file.close(); qss = list.join("\n"); QString paletteColor = qss.mid(20, 7); this->setPalette(QPalette(paletteColor)); //用时主要在下面这句 this->setStyleSheet(qss); } } void FormMultiHeads::slotContextMenu(QPoint pos) { // QString strMenu= ""; if(m_strHeadOrTail == "Head") { strMenu= "新建图头"; } else { strMenu= "新建成果表"; } QMenu menu(ui->tableWidget); QAction *newAction = menu.addAction(strMenu); // 弹出菜单 QAction *selectedAction = menu.exec(ui->tableWidget->mapToGlobal(pos)); if (selectedAction == newAction) { NewHeadDialog *dlg = new NewHeadDialog(this); // dlg->setAttribute(Qt::WA_DeleteOnClose);//关闭时,自动删除窗口对象 int result = dlg->exec();//模态对话框 if (result == QDialog::Accepted) { // 处理用户点击了确定按钮的逻辑 qDebug() << "Accepted="; AddHead(); } else if (result == QDialog::Rejected) { // 处理用户点击了取消按钮的逻辑 qDebug() << "Rejected="; } else { // 处理其他情况的逻辑 qDebug() << "other="; } } } //添加图头 void FormMultiHeads::AddHead() { int rowcount = ui->tableWidget->rowCount(); //总行数 //增加1行 ui->tableWidget->setRowCount(rowcount+1); //行标题 QTableWidgetItem *headerItem = new QTableWidgetItem(""); ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem); int colWidth = g_iCols*g_iColsWidth+g_iFixedWidth+8; int rowHight = g_iRows*g_iRowsHight+g_iFixedHeight+8; //设置行高度 ui->tableWidget->setRowHeight(rowcount, rowHight); if(rowcount==0) { //设置列宽 ui->tableWidget->setColumnWidth(0, colWidth); } else { int iWidth=ui->tableWidget->columnWidth(0); if(iWidthtableWidget->setColumnWidth(0, colWidth); } } // QtCommonClass *qtCommon = new QtCommonClass(this); QString strUuid = qtCommon->getUUid(); FormHead *widgetHead = new FormHead(this, strUuid); widgetHead->Init(g_iRows, g_iCols); ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); } void FormMultiHeads::resizeItem(QString indexID, double colWidth, double rowHight, bool bDelete) { // int rowCount = ui->tableWidget->rowCount();//总行数 for(int i=0; itableWidget->cellWidget(i, 0) != nullptr ) { auto myWidget = ui->tableWidget->cellWidget(i, 0); if(myWidget) { // FormHead *widgetHead = (FormHead*)myWidget;//获得widget if(widgetHead) { if(widgetHead->m_indexID == indexID) { if(bDelete) { //删除1行 ui->tableWidget->removeRow(i); } else { //设置行高度 ui->tableWidget->setRowHeight(i, rowHight+8); int iWidth=ui->tableWidget->columnWidth(0); if(iWidthtableWidget->setColumnWidth(0, colWidth+8); } } } } } } } } QJsonArray FormMultiHeads::makeJsonArray() { //列宽 double colWidth = ui->tableWidget->columnWidth(0)/g_dPixelPerCm; double rowHeight = 0; // 创建JSON数组并填充数据 QJsonArray subcaseArray; // int rowCount = ui->tableWidget->rowCount();//总行数 for(int i=0; itableWidget->rowHeight(i)/g_dPixelPerCm; QJsonObject formHeadObj; formHeadObj["id"] = i; formHeadObj["colWidth"] = colWidth; formHeadObj["rowHeight"] = rowHeight; if( ui->tableWidget->cellWidget(i, 0) != nullptr ) { auto myWidget = ui->tableWidget->cellWidget(i, 0); FormHead *widgetHead = qobject_cast(myWidget); if(widgetHead) { QJsonObject jobj = widgetHead->makeJson(); formHeadObj["headinfo"] = jobj; } } subcaseArray.append(formHeadObj); } return subcaseArray; } //展示所有图头/成果表 //Head代表图头, Tail代表成果表 void FormMultiHeads::DisplayHeads(QJsonArray headsArray, QString strHeadOrTail) { QtCommonClass *qtCommon = new QtCommonClass(this); QMap mapHeads; double colWidth = 0; double rowHeight = 0; int id = 0; int iCount = headsArray.size(); for(int i=0; itableWidget->setColumnWidth(0, colWidth); } } } if (headObj.contains("rowHeight")) { QJsonValue value = headObj.value("rowHeight"); if (value.isDouble()) { rowHeight = value.toDouble(); qDebug() << "rowHeight:" << QString::number(rowHeight); //设置行高度 ui->tableWidget->setRowHeight(id, rowHeight); } } int rowcount = ui->tableWidget->rowCount(); //总行数 //增加1行 ui->tableWidget->setRowCount(rowcount+1); //行标题 QTableWidgetItem *headerItem = new QTableWidgetItem(""); ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem); if (headObj.contains("headinfo")) { QJsonValue value = headObj.value("headinfo"); if (value.isObject()) { QJsonObject headObjInfo = value.toObject(); //展示其中一行 int iCols = 0; int iRows = 0; // if (headObjInfo.contains("iCols")) { QJsonValue value = headObjInfo.value("iCols"); if (value.isDouble()) { iCols = value.toInt(); qDebug() << "iCols:" << QString::number(iCols); } } // if (headObjInfo.contains("iRows")) { QJsonValue value = headObjInfo.value("iRows"); if (value.isDouble()) { iRows = value.toInt(); qDebug() << "iRows:" << QString::number(iRows); } } // QString strUuid = qtCommon->getUUid(); FormHead *widgetHead = new FormHead(this, strUuid); widgetHead->Init(iRows, iCols); ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); // widgetHead->updateJsonInfo(headObjInfo); } } } } }