锁头,调整道头高度,右侧滑棒跟随调整

This commit is contained in:
jiayulong 2026-06-08 16:28:33 +08:00
parent 59ac718dff
commit 4b5507ac0a
6 changed files with 113 additions and 18 deletions

View File

@ -22,6 +22,8 @@ extern int g_WorkSpace_Height;
extern QString g_strSlfName;
extern QString g_strWellName;
extern int g_iLoadingJson;
//井+道名
FormWell::FormWell(QWidget *parent, QString strWellName) :
QWidget(parent),
@ -65,6 +67,10 @@ FormWell::FormWell(QWidget *parent, QString strWellName) :
ui->tableWidget->verticalScrollBar()->setDisabled(true); // 禁用滚动
ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏垂直滚动条
//行高改变
connect(ui->tableWidget->verticalHeader(), &QHeaderView::sectionResized, this, &FormWell::onSectionResized);
//关联信号槽
connect(CallManage::getInstance(), SIGNAL(sig_NewTrack(QString, QString, QString, QString, QString,int)), this, SLOT(s_NewTrack(QString, QString, QString, QString, QString,int)));
//关联信号槽
@ -1129,7 +1135,7 @@ void FormWell::vertScrollBarChanged_setGeometry(double value, double low, double
}
//获取头2行的宽高方便输出图
void FormWell::getTableSize_Head_Biggest(int &iHight)
void FormWell::getTableSize_Head_Biggest(int &iHight, int &iHight1, int &iHight2)
{
//获取可视视图大小 tableWidget
iHight = 0;
@ -1146,6 +1152,7 @@ void FormWell::getTableSize_Head_Biggest(int &iHight)
}
//
int iHight_Big = 0;
int iHight_Big_Row2 = 0;
int columnCount = ui->tableWidget->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
@ -1161,6 +1168,7 @@ void FormWell::getTableSize_Head_Biggest(int &iHight)
if(iHight_Tmp>iHight_Big)
{
iHight_Big = iHight_Tmp;
iHight_Big_Row2 = ui->tableWidget->rowHeight(1);
}
}
}
@ -1173,11 +1181,16 @@ void FormWell::getTableSize_Head_Biggest(int &iHight)
//
if(iHight == 0)
{
iHight1 = 100;
iHight2 = m_nObjLyrH;
//
iHight = 100 + m_nObjLyrH;
}
else
{
iHight1 = iHight;
iHight2 = iHight_Big_Row2;
//
iHight = iHight + iHight_Big;
}
}
@ -1317,3 +1330,35 @@ double FormWell::getTrackHeight(FormTrackTop *formTrackTop)
return dTrackHeight;
}
//列宽改变
void FormWell::onSectionResized(int logicalIndex, int oldSize, int newSize)
{
if(g_iLoadingJson==1)//针对模板加载,不处理列宽改变,避免多次冲突
{
return;
}
if(m_bSetRowHeight) //手工设置行高
{
m_bSetRowHeight = false; //手工设置行高
return;
}
//qDebug() << "FormWell onSectionResized, logicalIndex="+ QString::number(logicalIndex) +", newSize="+ QString::number(newSize);
if(logicalIndex==0)
{
//第一行不允许改变高度
ui->tableWidget->setRowHeight(0, 100);
}
else if(logicalIndex==1)
{
if(newSize!=0)
{
MainWindowCurve *parent = (MainWindowCurve *)m_parent;
parent->SetScrollBar_Geometry();
parent->vertScrollBarChanged_Head(0);
}
}
}

View File

@ -68,6 +68,8 @@ public:
bool m_bShowTrackHead = true; //显示道头
bool m_bMultiProject = false; //多井的打开工程使用模板的井名和slf名
bool m_bSetRowHeight = true; //手工设置行高
// 道图形
QMap<QString, QVector<QWidget*>> m_mapFormDraw;
@ -87,7 +89,7 @@ public:
//获取当前井的所有道名称
QStringList getTrackNameList();
void getTableSize_Head(int &iHight);
void getTableSize_Head_Biggest(int &iHight);//展开FormIndo后获取真正的高度最大值
void getTableSize_Head_Biggest(int &iHight, int &iHight1, int &iHight2);//展开FormIndo后获取真正的高度最大值
void getRowHeight_Well(int &iHight1, int &iHight2, int &iHight3);
void setRowHeight_Well(int iHight1, int iHight2, int iHight3);
@ -123,7 +125,8 @@ public slots:
void slotContextMenu(QPoint pos);
void slotDeleteSelectTrack();
//行高改变
void onSectionResized(int logicalIndex, int oldSize, int newSize);
};
#endif // FORMWELL_H

View File

@ -275,9 +275,9 @@ void MainWindowCurve::s_setRangeVScrollBar2(QString strUuid)
{
return;
}
//自定义滚动条(头)
int iTableSize_Head_Biggest = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest);
// //自定义滚动条(头)
// int iTableSize_Head_Biggest = 0;
// getTableSize_Head_Biggest(iTableSize_Head_Biggest);
//int iTableWellTrack_height_Biggest = ui->tableWidget_2->rowHeight(0) + (5) + iTableSize_Head_Biggest -1;
// ui->verticalScrollBar_2->setRange(0, iTableSize_Head_Biggest-100-100);
@ -344,6 +344,15 @@ void MainWindowCurve::resizeWindow()
//2个滚动条位置
void MainWindowCurve::SetScrollBar_Geometry()
{
QRect rect2 = ui->centralwidget->geometry();
int left, top, right, bottom;
if (ui->centralwidget->layout())
{
ui->centralwidget->layout()->getContentsMargins(&left, &top, &right, &bottom);
}
//可视区域高度
int iScreenHeight = rect2.height()- top -bottom;
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
@ -356,14 +365,19 @@ void MainWindowCurve::SetScrollBar_Geometry()
ui->verticalScrollBar_2->setGeometry(geoRect2.x(), geoRect2.y(), geoRect2.width(), iTableWellTrack_height);
//
QRect geoRect = ui->verticalScrollBar->geometry();
ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y()+iTableWellTrack_height+2, geoRect.width(), geoRect.height()+geoRect2.height()-iTableWellTrack_height-2);
ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y()+iTableWellTrack_height+2, geoRect.width(), iScreenHeight-iTableWellTrack_height-2);
//ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y()+iTableWellTrack_height+2, geoRect.width(), geoRect.height()+geoRect2.height()-iTableWellTrack_height-2);
//自定义滚动条(头)
int iTableSize_Head_Biggest = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest);
int iTableSize_Head1 = 0;
int iTableSize_Head2 = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest, iTableSize_Head1, iTableSize_Head2);
//int iTableWellTrack_height_Biggest = ui->tableWidget_2->rowHeight(0) + (5) + iTableSize_Head_Biggest -1;
m_iTableSize_Head2 = iTableSize_Head2;
ui->verticalScrollBar_2->setRange(0, iTableSize_Head_Biggest-100-100);
//ui->verticalScrollBar_2->setRange(0, iTableSize_Head_Biggest - 100 -100);
ui->verticalScrollBar_2->setRange(0, iTableSize_Head_Biggest - iTableSize_Head);
ui->verticalScrollBar_2->setValue(0);
//connect(ui->verticalScrollBar_2, SIGNAL(valueChanged(int)), this, SLOT(vertScrollBarChanged_Head(int)));
}
@ -375,7 +389,8 @@ void MainWindowCurve::SetScrollBar_Geometry()
ui->verticalScrollBar_2->setGeometry(geoRect2.x(), geoRect2.y(), geoRect2.width(), 0);
//
QRect geoRect = ui->verticalScrollBar->geometry();
ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y(), geoRect.width(), geoRect.height()+geoRect2.height());
ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y(), geoRect.width(), iScreenHeight);
//ui->verticalScrollBar->setGeometry(geoRect.x(), geoRect2.y(), geoRect.width(), geoRect.height()+geoRect2.height());
//
// //获取井well前2行的高度
@ -497,7 +512,7 @@ void MainWindowCurve::vertScrollBarChanged_Head(int value)
{
widgetWell->getRowHeight_Well(iHight1, iHight2, iHight3);
//
widgetWell->setRowHeight_Well(iHight1, 100+value, iHight3);
widgetWell->setRowHeight_Well(iHight1, m_iTableSize_Head2+value, iHight3);
//widgetWell->update();
}
}
@ -4427,7 +4442,13 @@ void MainWindowCurve::s_NewWell(QString strWellName, QString strSlfName, bool bS
widgetWell->m_iY2 = m_iY2;
widgetWell->m_strUuid = m_strUuid;
widgetWell->m_strSlfName = strSlfName;
widgetWell->m_nObjLyrH = m_nObjLayerH;
if(m_iTableSize_Head2>m_nObjLayerH)
{
widgetWell->m_nObjLyrH = m_iTableSize_Head2; //m_nObjLayerH;
}
else{
widgetWell->m_nObjLyrH = m_nObjLayerH;
}
widgetWell->m_nObjDrawH = m_nObjDrawH;
widgetWell->m_iScale = m_iScale;
widgetWell->setWellHeader(wellH);
@ -4445,6 +4466,9 @@ void MainWindowCurve::s_NewWell(QString strWellName, QString strSlfName, bool bS
}
}
//道头滚动条
//vertScrollBarChanged_Head(0);
//ui->tableWidget_2->resizeColumnsToContents(); // 调整列宽以适应内容
// 设置右键菜单策略
@ -6445,7 +6469,7 @@ void MainWindowCurve::getTableSize_Head(int &iHight)
}
}
void MainWindowCurve::getTableSize_Head_Biggest(int &iHight)
void MainWindowCurve::getTableSize_Head_Biggest(int &iHight, int &iHight1, int &iHight2)
{
//获取可视视图大小 well井
iHight = 0;
@ -6482,10 +6506,14 @@ void MainWindowCurve::getTableSize_Head_Biggest(int &iHight)
if(widgetWell)
{
int iHight_Tmp = 0;
widgetWell->getTableSize_Head_Biggest(iHight_Tmp);
int iHight1_Tmp = 0;
int iHight2_Tmp = 0;
widgetWell->getTableSize_Head_Biggest(iHight_Tmp, iHight1_Tmp, iHight2_Tmp);
if(iHight_Tmp>iHight)
{
iHight = iHight_Tmp;
iHight1 = iHight1_Tmp;
iHight2 = iHight2_Tmp;
}
}
}
@ -6645,7 +6673,9 @@ void MainWindowCurve::ShowTableHead_All()
{
//展示所有遮挡的FormInfo头
int iTableSize_Head_Biggest = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest);
int iTableSize_Head1 = 0;
int iTableSize_Head2 = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest, iTableSize_Head1, iTableSize_Head2);
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
for(int i=0; i<columnCount; i++)

View File

@ -46,7 +46,7 @@ protected:
public:
void resizeItem(QString strWellName, double tempWidth, double tempHight);
void getTableSize_Head(int &iHight);
void getTableSize_Head_Biggest(int &iHight);//展开FormIndo后获取真正的高度最大值
void getTableSize_Head_Biggest(int &iHight, int &iHight1, int &iHight2);//展开FormIndo后获取真正的高度最大值
void setTableSize_Well();
//隐藏道头/对象头
void HideTableHead();
@ -113,6 +113,7 @@ public:
bool m_bShowTrackHead = true; //显示道头
//预览图
bool g_bPreviewPrint = false;
int m_iTableSize_Head2 = 104;
public:
//黑白图,针对共享内存,使用老版本代码,需要以下定义
//整图放大缩小比例

View File

@ -14,6 +14,8 @@
QMyTableWidget::QMyTableWidget(QWidget *parent) :
QTableWidget(parent)
{
m_parent = parent;
//setSelectionBehavior(QAbstractItemView::SelectColumns); //拖动列
setAcceptDrops(true);
@ -225,3 +227,14 @@ void QMyTableWidget::performDrag()
//
}
}
void QMyTableWidget::setRowHeight(int row, int height)
{
//qDebug()<<"QMyTableWidget setRowHeight!";
FormWell *parent = (FormWell *)m_parent;
parent->m_bSetRowHeight = true; //手工设置行高
QTableWidget::setRowHeight(row, height);
}

View File

@ -11,7 +11,8 @@ class QMyTableWidget : public QTableWidget
Q_OBJECT
public:
explicit QMyTableWidget(QWidget *parent = 0);
void setRowHeight(int row, int height);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
@ -26,6 +27,8 @@ private:
void performDrag();
public:
QWidget *m_parent;
QPoint startPos;
int m_selectCol;//鼠标选择拖动的位置
int m_hoverCol;