logplus/logPlus/formmultiheads.cpp

351 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "formmultiheads.h"
#include "ui_formmultiheads.h"
#include <QDebug>
#include <QMenu>
#include <QFile>
#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(iWidth<g_iCols*g_iColsWidth)//列宽变大,以最大列宽为准
{
//设置列宽
ui->tableWidget->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; i<rowCount; i++)
{
if( ui->tableWidget->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(iWidth<colWidth+8)//列宽变大,以最大列宽为准
{
//设置列宽
ui->tableWidget->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; i<rowCount; i++)
{
//行高
rowHeight = ui->tableWidget->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<FormHead*>(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<int, int> mapHeads;
double colWidth = 0;
double rowHeight = 0;
int id = 0;
int iCount = headsArray.size();
for(int i=0; i<iCount; i++)
{
QJsonValue headValue = headsArray[i];
QJsonObject headObj = headValue.toObject();
//
if (headObj.contains("id"))
{
QJsonValue value = headObj.value("id");
if (value.isDouble()) {
id = value.toInt();
qDebug() << "id:" << QString::number(id);
//
mapHeads.insert(id, i);
}
}
}
for(int id=0; id<iCount; id++)
{
if(mapHeads.contains(id))
{
int iNum = mapHeads.value(id);
//按照id顺序展示井
QJsonValue headValue = headsArray[iNum];
QJsonObject headObj = headValue.toObject();
//
if(id==0)
{
if (headObj.contains("colWidth"))
{
QJsonValue value = headObj.value("colWidth");
if (value.isDouble()) {
colWidth = value.toDouble();
qDebug() << "colWidth:" << QString::number(colWidth);
//设置列宽
ui->tableWidget->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);
}
}
}
}
}