图头属性信息可配置,支持背景图例配置,支持文字字体、颜色配置。

This commit is contained in:
jiayulong 2025-11-12 16:56:33 +08:00
parent cf80a84c9e
commit c8f80b3b58
12 changed files with 457 additions and 69 deletions

View File

@ -2,9 +2,12 @@
#include <QScrollBar>
#include <QDateTime>
#include <QDebug>
#include <QSvgRenderer>
#include <QLabel>
#include "CallManage.h"
extern int g_iScale;
extern double g_dPixelPerCm;//每厘米像素数
PropertyWidget::PropertyWidget(const QString &title, QWidget *parent , Qt::WindowFlags flags )
:QDockWidget(title,parent,flags)
@ -61,6 +64,7 @@ void PropertyWidget::InitCurrentViewInfo()
m_propertyData.clear();
m_mapGroupItem.clear();
m_strUuid = "";
m_strSlfName = "";
m_strWellName = "";
m_strTrackName = "";
@ -73,13 +77,13 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
{
if("深度比例尺" == m_propertyData[pProperty])
{
qDebug() << "深度比例尺->改变";
//qDebug() << "深度比例尺->改变";
//当前属性类型
if(m_strCurrentProperty == Widget_Property)
{
int iScale = 200;
QString newScale = pProperty->valueText();
qDebug() << "深度比例尺->" << newScale;
//qDebug() << "深度比例尺->" << newScale;
//
int pos = newScale.indexOf(":");
if(pos>-1)
@ -96,10 +100,9 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
g_iScale = iScale;
}
}
else if("左刻度" == m_propertyData[pProperty])
{
qDebug() << "左刻度->改变";
//qDebug() << "左刻度->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -111,7 +114,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("右刻度" == m_propertyData[pProperty])
{
qDebug() << "右刻度->改变";
//qDebug() << "右刻度->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -123,7 +126,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("刻度类型" == m_propertyData[pProperty])
{
qDebug() << "刻度类型->改变";
//qDebug() << "刻度类型->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -135,7 +138,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("颜色" == m_propertyData[pProperty])
{
qDebug() << "颜色->改变";
//qDebug() << "颜色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -147,7 +150,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("线宽" == m_propertyData[pProperty])
{
qDebug() << "线宽->改变";
//qDebug() << "线宽->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -157,7 +160,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("线型" == m_propertyData[pProperty])
{
qDebug() << "线型->改变";
//qDebug() << "线型->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -194,7 +197,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("填充模式" == m_propertyData[pProperty])
{
qDebug() << "填充模式->改变";
//qDebug() << "填充模式->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -203,7 +206,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("填充类型" == m_propertyData[pProperty])
{
qDebug() << "填充类型->改变";
//qDebug() << "填充类型->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -212,7 +215,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("目标曲线" == m_propertyData[pProperty])
{
qDebug() << "目标曲线->改变";
//qDebug() << "目标曲线->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -221,7 +224,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("填充颜色" == m_propertyData[pProperty])
{
qDebug() << "填充颜色->改变";
//qDebug() << "填充颜色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -230,7 +233,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("填充岩性" == m_propertyData[pProperty])
{
qDebug() << "填充岩性->改变";
//qDebug() << "填充岩性->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -239,7 +242,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("岩性前景色" == m_propertyData[pProperty])
{
qDebug() << "岩性前景色->改变";
//qDebug() << "岩性前景色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -248,7 +251,7 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("岩性背景色" == m_propertyData[pProperty])
{
qDebug() << "岩性背景色->改变";
//qDebug() << "岩性背景色->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
@ -257,13 +260,164 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
}
else if("头部图例" == m_propertyData[pProperty])
{
qDebug() << "头部图例->改变";
//qDebug() << "头部图例->改变";
//当前属性类型
if(m_strCurrentProperty == Curve_Property)
{
ChangFillProperty();
}
}
//图头---------------------------
else if("图例" == m_propertyData[pProperty])
{
//qDebug() << "图例->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
QString newSvg = variant.value<QString>();
m_item->setData(Qt::UserRole+1, newSvg); // 图片路径
//图头项改变
ChangHeadItemProperty();
}
}
else if("图例宽(cm)" == m_propertyData[pProperty])
{
//qDebug() << "图例宽(cm)->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
double newWidth = variant.value<double>();
m_item->setData(Qt::UserRole+2, newWidth); // 图片路径
m_colWidth = newWidth;
//图头项改变
ChangHeadItemProperty();
}
}
else if("图例高(cm)" == m_propertyData[pProperty])
{
//qDebug() << "图例高(cm)->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
double newHight = variant.value<double>();
m_item->setData(Qt::UserRole+3, newHight); // 图片路径
m_rowHeight = newHight;
//图头项改变
ChangHeadItemProperty();
}
}
else if("内容" == m_propertyData[pProperty])
{
//qDebug() << "内容->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
QString newText = variant.value<QString>();
m_formHead->m_bRefresh=false;
m_item->setText(newText);
}
}
else if("方向" == m_propertyData[pProperty])
{
//qDebug() << "方向->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
QString newDirection = pProperty->valueText();
if(newDirection=="垂直")
{
}
else{
//m_item->
}
}
}
else if("字体颜色" == m_propertyData[pProperty])
{
//qDebug() << "字体颜色->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
//字体颜色
// 假设variant已经被设置为包含QColor
QColor newColor = variant.value<QColor>();
// 设置字体颜色
QBrush brush(newColor); // 使用Qt::red预定义颜色
m_formHead->m_bRefresh=false;
m_item->setForeground(brush);
}
}
else if("字体" == m_propertyData[pProperty])
{
//qDebug() << "字体->改变";
//当前属性类型
if(m_strCurrentProperty == Head_Property)
{
//字体
// 假设variant已经被设置为包含QColor
QFont newFont = variant.value<QFont>();
// 设置字体
m_formHead->m_bRefresh=false;
m_item->setFont(newFont);
}
}
}
void PropertyWidget::ChangHeadItemProperty()
{
//清空
m_tableWidget->setCellWidget(m_iRow, m_iCol, nullptr);
//---------------------------
QString imagePath = ""; //"./image/胜利符号库/解释结论符号/油层.svg"
QVariant bgData = m_item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径
if (bgData.isValid()) {
imagePath = bgData.toString();
}
if(imagePath=="")
{
return;
}
if(imagePath!="")
{
if(imagePath.size()>4)
{
int colWidth = m_colWidth*g_dPixelPerCm;
int rowHeight = m_rowHeight*g_dPixelPerCm;
//
QString strLast = imagePath.right(4);
if(strLast.toLower()==".svg")
{
//
QSvgRenderer* svgRender = new QSvgRenderer();
svgRender->load(imagePath);
//
QPixmap* pixmap = new QPixmap(colWidth-1, rowHeight-1);
pixmap->fill(Qt::transparent);//设置背景透明
QPainter p(pixmap);
svgRender->render(&p);
//1.直接采用控件显示
QLabel* label = new QLabel;
label->setPixmap(*pixmap);
label->setAlignment(Qt::AlignHCenter);
label->show();
m_formHead->m_bRefresh=false;
m_tableWidget->setCellWidget(m_iRow, m_iCol,label);
//m_item->setIcon(QIcon(*pixmap));
// 设置背景刷
//QBrush brush(*pixmap);
//m_item->setBackground(brush);
//m_tableWidget->setItem(m_iRow, m_iCol, new QTableWidgetItem(QIcon(*pixmap),tr("")));
}
else if(strLast.toLower()==".png")
{
}
}
}
}
void PropertyWidget::ChangFillProperty()
@ -288,7 +442,7 @@ void PropertyWidget::ChangFillProperty()
if(pProperty->hasValue())
{
newFillMode = pProperty->valueText();
qDebug() << "填充模式->" << newFillMode;
//qDebug() << "填充模式->" << newFillMode;
}
}
else if(it.value()=="填充类型")
@ -297,7 +451,7 @@ void PropertyWidget::ChangFillProperty()
if(pProperty->hasValue())
{
newFillType = pProperty->valueText();
qDebug() << "填充类型->" << newFillType;
//qDebug() << "填充类型->" << newFillType;
}
}
else if(it.value()=="目标曲线")
@ -306,7 +460,7 @@ void PropertyWidget::ChangFillProperty()
if(pProperty->hasValue())
{
newTargetLine = pProperty->valueText();
qDebug() << "目标曲线->" << newTargetLine;
//qDebug() << "目标曲线->" << newTargetLine;
//
if(newTargetLine=="左界道" || newTargetLine=="右界道" || newTargetLine=="对称线")
{
@ -334,7 +488,7 @@ void PropertyWidget::ChangFillProperty()
{
newColor = pProperty->value().value<QColor>();
}
qDebug() << "填充颜色->";
//qDebug() << "填充颜色->";
}
else if(it.value()=="填充岩性")
{
@ -343,7 +497,7 @@ void PropertyWidget::ChangFillProperty()
{
newLithosImage = pProperty->valueText();
}
qDebug() << "填充岩性->" << newLithosImage;
//qDebug() << "填充岩性->" << newLithosImage;
}
else if(it.value()=="岩性前景色")
{
@ -352,7 +506,7 @@ void PropertyWidget::ChangFillProperty()
{
frontColor = pProperty->value().value<QColor>();
}
qDebug() << "岩性前景色->";
//qDebug() << "岩性前景色->";
}
else if(it.value()=="岩性背景色")
{
@ -361,7 +515,7 @@ void PropertyWidget::ChangFillProperty()
{
backColor = pProperty->value().value<QColor>();
}
qDebug() << "岩性背景色->";
//qDebug() << "岩性背景色->";
}
else if(it.value()=="头部图例")
{
@ -369,7 +523,7 @@ void PropertyWidget::ChangFillProperty()
if(pProperty->hasValue())
{
newHeadFill = pProperty->valueText();
qDebug() << "头部图例->" << newHeadFill;
//qDebug() << "头部图例->" << newHeadFill;
}
}
}
@ -481,27 +635,11 @@ void PropertyWidget::initWidgetProperty()
}
void PropertyWidget::initCurveProperty(FormInfo *formInfo, QStringList strListOtherLine, QList<float> listMin, QList<float> listMax, QStringList strListOtherScaleType)
//void PropertyWidget::initCurveProperty(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QColor lineColor, double dWidth, QStringList strListOtherLine)
{
//初始化,清空
InitCurrentViewInfo();
m_strUuid = formInfo->m_strUuid;
// QString strSlfName = formInfo->m_strSlfName;
// QString strWellName = formInfo->m_strWellName;
// QString strTrackName = formInfo->m_strTrackName;
// QString strLineName = formInfo->m_strLineName;
// int ilineStyle = formInfo->m_lineStyle;
// QString newHeadFill = formInfo->m_newHeadFill;
// QColor lineColor = formInfo->m_lineColor;
// double dWidth = formInfo->m_dWidth;
// float vmax = formInfo->m_vmax;
// float vmin = formInfo->m_vmin;
// QString strScaleType = formInfo->m_strScaleType;
// QColor frontColor = formInfo->m_frontColor;
// QColor backColor = formInfo->m_backColor;
//
m_strSlfName = formInfo->m_strSlfName;
m_strWellName = formInfo->m_strWellName;
@ -578,3 +716,50 @@ void PropertyWidget::initCurveProperty(FormInfo *formInfo, QStringList strListOt
_CreateVariantPropertyItem("岩性填充", "岩性前景色", formInfo->m_frontColor, QVariant::Color);
_CreateVariantPropertyItem("岩性填充", "岩性背景色", formInfo->m_backColor, QVariant::Color);
}
void PropertyWidget::initHeadProperty(FormHead *formHead, QTableWidget *tableWidget, QTableWidgetItem* item, int row, int col)
{
//初始化,清空
InitCurrentViewInfo();
m_formHead = formHead;
m_tableWidget = tableWidget;
m_item = item;
m_iRow = row;
m_iCol = col;
//当前属性类型
m_strCurrentProperty = Head_Property;
QStringList listDirection;
listDirection.append("水平");
listDirection.append("垂直");
QString imagePath = "";//"./image/胜利符号库/解释结论符号/油层.svg"
QVariant bgData = m_item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径
if (bgData.isValid()) {
imagePath = bgData.toString();
}
//图例宽
QVariant colWidthData = m_item->data(Qt::UserRole+2);
if (colWidthData.isValid()) {
m_colWidth = colWidthData.toDouble();
}
//图例高
QVariant rowHeightData = m_item->data(Qt::UserRole+3);
if (rowHeightData.isValid()) {
m_rowHeight = rowHeightData.toDouble();
}
_CreateVariantPropertyItem("单元格", "图例", imagePath, VariantManager::filePathTypeId()); //"./image/胜利符号库/岩性符号/砂岩.png"
_CreateVariantPropertyItem("单元格", "图例宽(cm)", m_colWidth, QVariant::Double, 0, 100);
_CreateVariantPropertyItem("单元格", "图例高(cm)", m_rowHeight, QVariant::Double, 0, 100);
_CreateVariantPropertyItem("文本", "内容", item->text(), QVariant::String);
_CreateVariantPropertyItem("文本", "字体", m_item->font(), QVariant::Font);
_CreateEnumPropertyItem("文本", "方向", 0, listDirection);
_CreateVariantPropertyItem("文本", "字体颜色", m_item->foreground().color(), QVariant::Color);
}

View File

@ -6,6 +6,7 @@
*/
#pragma once
#include <QDockWidget>
#include <QTableWidget>
#include "qtpropertybrowser.h"
#include "qtvariantproperty.h"
@ -15,10 +16,12 @@
#include "variantfactory.h"
//
#include "forminfo.h"
#include "formhead.h"
//当前曲线类型
#define Widget_Property "Widget_Property"
#define Curve_Property "Curve_Property"
#define Head_Property "Head_Property"
#pragma execution_character_set("utf-8")
@ -57,6 +60,14 @@ public:
QList<float> m_listMax;
QStringList m_strListOtherScaleType;
FormHead *m_formHead;
QTableWidget *m_tableWidget;
QTableWidgetItem* m_item;
int m_iRow;
int m_iCol;
double m_colWidth = 1;
double m_rowHeight = 1;
public:
QWidget* GetPropertyWidget();
@ -66,11 +77,15 @@ public:
void InitCurrentViewInfo(); //初始化属性,清空
void initWidgetProperty(); //可视解释整体属性
//void initCurveProperty(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QColor lineColor, double dWidth, QStringList strListOtherLine); //曲线属性
//曲线
void initCurveProperty(FormInfo *formInfo, QStringList strListOtherLine, QList<float> listMin, QList<float> listMax, QStringList strListOtherScaleType);
//图头
void initHeadProperty(FormHead *formHead, QTableWidget *tableWidget, QTableWidgetItem* item, int row, int col);
void ChangFillProperty();//填充属性改变
void ChangHeadItemProperty();//图头项改变
public slots:
void SlotPropertyChanged( QtProperty *property, const QVariant &variant );

View File

@ -0,0 +1,24 @@
#include "backgrounddelegate.h"
#include <QPainter>
#include <QPixmap>
BackgroundDelegate::BackgroundDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
void BackgroundDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
// 首先检查这个单元格是否有背景图片数据我们可以使用一个角色来存储比如Qt::UserRole+1
QVariant bgData = index.data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径
if (bgData.isValid()) {
QString imagePath = bgData.toString();
QPixmap pixmap(imagePath);
if (!pixmap.isNull()) {
// 绘制背景图片,缩放到单元格大小
painter->drawPixmap(option.rect, pixmap.scaled(option.rect.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}
}
// 然后调用基类绘制文本等
QStyledItemDelegate::paint(painter, option, index);
}

View File

@ -0,0 +1,15 @@
#ifndef BACKGROUNDDELEGATE_H
#define BACKGROUNDDELEGATE_H
// 在头文件中声明
#include <QStyledItemDelegate>
class BackgroundDelegate : public QStyledItemDelegate
{
public:
explicit BackgroundDelegate(QObject *parent = nullptr);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
};
#endif // BACKGROUNDDELEGATE_H

View File

@ -6,13 +6,20 @@
#include <QClipboard>
#include "CallManage.h"
#include <QTimer>
#include <QSvgRenderer>
#include <QLabel>
#include "backgrounddelegate.h"
#include "PropertyWidget.h"
//extern int g_iRows;
//extern int g_iCols;
int g_iColsWidth=200;
int g_iRowsHight=80;
int g_iFixedWidth=20;
int g_iFixedHeight=20;
int g_iColsWidth=100;
int g_iRowsHight=40;
extern double g_dPixelPerCm;//每厘米像素数
//画图头
FormHead::FormHead(QWidget *parent, int indexID) :
QWidget(parent),
@ -31,8 +38,8 @@ FormHead::FormHead(QWidget *parent, int indexID) :
//
//ui->tableWidget->verticalHeader()->hide(); //行
//ui->tableWidget->horizontalHeader()->hide(); //列
ui->tableWidget->verticalHeader()->setFixedWidth(3);//标题栏宽度
ui->tableWidget->horizontalHeader()->setFixedHeight(3);//标题栏高度
ui->tableWidget->verticalHeader()->setFixedWidth(g_iFixedWidth);//标题栏宽度
ui->tableWidget->horizontalHeader()->setFixedHeight(g_iFixedHeight);//标题栏高度
//ui->tableWidget->setColumnCount(1); //动态设置列数
//ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//最后一列铺满最后
//标题
@ -43,12 +50,14 @@ FormHead::FormHead(QWidget *parent, int indexID) :
ui->tableWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
// 设置右键菜单策略
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
// 在窗口构造函数中
//ui->tableWidget->installEventFilter(this);
// 设置整个表格的委托,或者特定列的委托
//ui->tableWidget->setItemDelegate(new BackgroundDelegate(ui->tableWidget));
// 连接信号和槽
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
//connect(ui->tableWidget, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(slotItemClicked(QTableWidgetItem*)));
}
FormHead::~FormHead()
@ -59,14 +68,16 @@ FormHead::~FormHead()
void FormHead::resizeWindow()
{
QRect rect = this->rect();
int tempWidth = m_iCols*g_iColsWidth+g_iFixedWidth+10;
int tempHight = m_iRows*g_iRowsHight+g_iFixedHeight+10;
//调整大小
if(rect.width()>m_iCols*g_iColsWidth)
if(rect.width()>tempWidth)
{
ui->tableWidget->setGeometry((rect.width()-(m_iCols*g_iColsWidth+1))/2, 0, m_iCols*(g_iColsWidth+1)+4, m_iRows*(g_iRowsHight+2)+4);
ui->tableWidget->setGeometry((rect.width()-tempWidth)/2, 2, tempWidth, tempHight);
}
else
{
ui->tableWidget->setGeometry(0, 0, m_iCols*(g_iColsWidth+1)+4, m_iRows*(g_iRowsHight+2)+4);
ui->tableWidget->setGeometry(0, 2, tempWidth, tempHight);
}
}
@ -75,7 +86,7 @@ void FormHead::resizeEvent(QResizeEvent *event)
resizeWindow();
}
void FormHead::Init(int iRows, int iCols, int iWidth)
void FormHead::Init(int iRows, int iCols)
{
m_iRows =iRows;
m_iCols = iCols;
@ -93,6 +104,19 @@ void FormHead::Init(int iRows, int iCols, int iWidth)
ui->tableWidget->setColumnCount(m_iCols);//列数
ui->tableWidget->setRowCount(m_iRows); //动态设置行数
// for(int i=0; i<m_iRows; i++)
// {
// //行标题
// QTableWidgetItem *headerItem = new QTableWidgetItem("");
// ui->tableWidget->setVerticalHeaderItem(i, headerItem);
// }
// for(int j=0; j<m_iCols; j++)
// {
// //列标题
// QTableWidgetItem *headerItem = new QTableWidgetItem("");
// ui->tableWidget->setHorizontalHeaderItem(j, headerItem);
// }
for(int i=0; i<m_iRows; i++)
{
//设置高度
@ -103,8 +127,101 @@ void FormHead::Init(int iRows, int iCols, int iWidth)
//设置列宽
ui->tableWidget->setColumnWidth(j, g_iColsWidth);
QTableWidgetItem* item = new QTableWidgetItem("");
ui->tableWidget->setItem(i, j, item);
double colWidth = g_iColsWidth-1;
double rowHeight = g_iRowsHight-1;
QTableWidgetItem* item = new QTableWidgetItem("");//QString::number(i) + "-" + QString::number(j)
// 将图片路径存储在Qt::UserRole+1角色中
item->setData(Qt::UserRole+1, "./image/胜利符号库/解释结论符号/"); // 图片路径
item->setData(Qt::UserRole+2, colWidth/g_dPixelPerCm); //图例宽
item->setData(Qt::UserRole+3, rowHeight/g_dPixelPerCm); //图例高
ui->tableWidget->setItem(i, j, item);
//---------------------------
QString imagePath = ""; //"./image/胜利符号库/解释结论符号/油层.svg"
QVariant bgData = item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径
if (bgData.isValid()) {
imagePath = bgData.toString();
}
if(imagePath=="")
{
continue;
}
//
if(imagePath.size()>4)
{
//
QString strLast = imagePath.right(4);
if(strLast.toLower()==".svg")
{
QSvgRenderer* svgRender = new QSvgRenderer();
svgRender->load(imagePath);
//
QPixmap* pixmap = new QPixmap(colWidth, rowHeight);
pixmap->fill(Qt::transparent);//设置背景透明
QPainter p(pixmap);
svgRender->render(&p);
//1.直接采用控件显示
QLabel* label = new QLabel;
label->setPixmap(*pixmap);
label->setAlignment(Qt::AlignHCenter);
label->show();
ui->tableWidget->setCellWidget(i, j,label);
}
else if(strLast.toLower()==".png")
{
}
}
}
}
//初始化完成后再连接信号槽,防止数据初始化时激活信号
connect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(onItemChanged(QTableWidgetItem*)));
connect(ui->tableWidget, SIGNAL(itemSelectionChanged()), this, SLOT(onItemSelectionChanged()));
}
void FormHead::slotItemClicked(QTableWidgetItem* item)
{
if (item) {
// 获取行和列索引
int row = item->row();
int column = item->column();
if(row>=0 && column>=0)
{
PropertyService()->initHeadProperty(this, ui->tableWidget, item, row, column);
}
}
}
void FormHead::onItemSelectionChanged()
{
QTableWidgetItem* item = ui->tableWidget->currentItem();
if (item) {
// 获取行和列索引
int row = item->row();
int column = item->column();
if(row>=0 && column>=0)
{
PropertyService()->initHeadProperty(this, ui->tableWidget, item, row, column);
}
}
}
void FormHead::onItemChanged(QTableWidgetItem* item)
{
if(m_bRefresh==false)
{
//针对属性页修改了内容,避免重复刷新属性页
m_bRefresh=true;
return;
}
if (item) {
// 获取行和列索引
int row = item->row();
int column = item->column();
if(row>=0 && column>=0)
{
PropertyService()->initHeadProperty(this, ui->tableWidget, item, row, column);
}
}
}

View File

@ -35,12 +35,18 @@ public:
int m_iRows;
int m_iCols;
bool m_bRefresh=true;
public:
void Init(int iRows, int iCols, int iWidth);
void Init(int iRows, int iCols);
void resizeEvent(QResizeEvent *event);
public slots:
void resizeWindow();
//
void slotItemClicked(QTableWidgetItem* item);
void onItemChanged(QTableWidgetItem* item);
void onItemSelectionChanged();
//图头右键菜单响应函数
void slotContextMenu(QPoint pos);

View File

@ -67,7 +67,14 @@ QJsonObject FormInfo::makeJson()
// 创建根对象
QJsonObject rootObj;
//
rootObj["SlfName"] = m_strSlfName;
QString slffilename=QString("");
int ind=m_strSlfName.lastIndexOf('\\');
int ind2=m_strSlfName.lastIndexOf('/');
if(ind2>ind) ind=ind2;
if(ind>-1) {
slffilename=m_strSlfName.mid(ind+1);
}
rootObj["SlfName"] = slffilename;
rootObj["WellName"] = m_strWellName;
rootObj["TrackName"] = m_strTrackName;
rootObj["LineName"] = m_strLineName;

View File

@ -10,6 +10,8 @@ extern int g_iRows;
extern int g_iCols;
extern int g_iColsWidth;
extern int g_iRowsHight;
extern int g_iFixedWidth;
extern int g_iFixedHeight;
FormMultiHeads::FormMultiHeads(QWidget *parent) :
QWidget(parent),
@ -29,8 +31,8 @@ FormMultiHeads::FormMultiHeads(QWidget *parent) :
//
//ui->tableWidget->verticalHeader()->hide(); //行
//ui->tableWidget->horizontalHeader()->hide(); //列
ui->tableWidget->verticalHeader()->setFixedWidth(3);//标题栏宽度
ui->tableWidget->horizontalHeader()->setFixedHeight(3);//标题栏高度
ui->tableWidget->verticalHeader()->setFixedWidth(10);//标题栏宽度
ui->tableWidget->horizontalHeader()->setFixedHeight(10);//标题栏高度
ui->tableWidget->setColumnCount(1); //动态设置列数
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//最后一列铺满最后
//标题
@ -73,28 +75,27 @@ void FormMultiHeads::slotContextMenu(QPoint pos)
QTableWidgetItem *headerItem = new QTableWidgetItem("");
ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem);
int iWidth=0;
int tempWidth = g_iCols*g_iColsWidth+g_iFixedWidth+15;
int tempHight = g_iRows*g_iRowsHight+g_iFixedHeight+15;
//设置行高度
ui->tableWidget->setRowHeight(rowcount, g_iRows*(g_iRowsHight+2)+1);
ui->tableWidget->setRowHeight(rowcount, tempHight);
if(rowcount==0)
{
iWidth=g_iCols*g_iColsWidth;
//设置列宽
ui->tableWidget->setColumnWidth(0, g_iCols*(g_iColsWidth+1)+1);
ui->tableWidget->setColumnWidth(0, tempWidth);
}
else
{
iWidth=ui->tableWidget->columnWidth(0);
int iWidth=ui->tableWidget->columnWidth(0);
if(iWidth<g_iCols*g_iColsWidth)//列宽变大
{
iWidth=g_iCols*g_iColsWidth;
//设置列宽
ui->tableWidget->setColumnWidth(0, g_iCols*(g_iColsWidth+1)+1);
ui->tableWidget->setColumnWidth(0, tempWidth);
}
}
//
FormHead *widgetHead = new FormHead(this, 1);
widgetHead->Init(g_iRows, g_iCols, iWidth);
widgetHead->Init(g_iRows, g_iCols);
ui->tableWidget->setCellWidget(rowcount, 0, widgetHead);
}
else if (result == QDialog::Rejected) {

View File

@ -15,13 +15,13 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>18</number>
<number>9</number>
</property>
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>18</number>
<number>9</number>
</property>
<property name="bottomMargin">
<number>0</number>

View File

@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui
QT += core gui svg
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -33,6 +33,7 @@ SOURCES += \
InDefTableDlg.cpp \
InterfaceWidget.cpp \
PropertyWidget.cpp \
backgrounddelegate.cpp \
customtabbar.cpp \
customtabwidget.cpp \
fileedit.cpp \
@ -66,6 +67,7 @@ HEADERS += \
InterfaceWidget.h \
PropertyWidget.h \
TransparentDraggableRect.h \
backgrounddelegate.h \
customtabbar.h \
customtabwidget.h \
fileedit.h \

View File

@ -456,7 +456,8 @@ void MainWindow::s_ShowCurve(QString strSlfName, QString strName)
{
WellLogTableDialogNew* pDialog = new WellLogTableDialogNew();
pDialog->setName(strSlfName, strName, CURVE_OBJECT);
QString wellname;QString path;
QString wellname;
QString path;
GetWellNameAndPath(strSlfName, wellname, path);
m_centerWidgets->addTab(pDialog, wellname + ":" + strName);
int iCount = m_centerWidgets->count();

View File

@ -1279,6 +1279,16 @@ void MainWindowCurve::DisplayLine_One(QJsonObject lineObjInfo)
if (value.isString()) {
strSlfName = value.toString();
//qDebug() << "SlfName:" << strSlfName;
//
QString slffilename=QString("");
int ind=strSlfName.lastIndexOf('\\');
int ind2=strSlfName.lastIndexOf('/');
if(ind2>ind) ind=ind2;
if(ind>-1) {
slffilename = strSlfName.mid(ind+1);
strSlfName = slffilename;
}
}
}
if (lineObjInfo.contains("WellName"))
@ -1384,6 +1394,11 @@ void MainWindowCurve::DisplayLine_One(QJsonObject lineObjInfo)
}
}
QString folderPath = GetLogdataPath();
folderPath = folderPath + g_prjname;
strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName;
if(strLineName!="")
{
//新建曲线