1。右侧滚动条优化,与绘图对齐。 2.优化锁头功能,区分上下区域的滚动条

This commit is contained in:
jiayulong 2026-05-26 11:11:54 +08:00
parent f0796b8c48
commit 5c8784bf9c
12 changed files with 731 additions and 65 deletions

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<height>100</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<height>100</height>
</rect>
</property>
<property name="windowTitle">

View File

@ -50,6 +50,10 @@ FormTrack::FormTrack(QWidget *parent, QString strSlfName, QString strWellName, Q
// 设置选择模式为单选模式
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
//隐藏滚动条
ui->tableWidget->verticalScrollBar()->setDisabled(true); // 禁用滚动
ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏垂直滚动条
//曲线
connect(this, SIGNAL(sig_AddLine(QString, QString, QString, QString, QString, QString, QColor, double, float, float, QString, QStringList, QString)),
this, SLOT(s_addLine(QString, QString, QString, QString, QString, QString, QColor, double, float, float, QString, QStringList, QString)));
@ -1536,6 +1540,31 @@ void FormTrack::s_addLogMud(QString strSlfName, QString strWellName, QString str
ui->tableWidget->setCellWidget(row, 0, formInfo);
}
//展开FormIndo后获取真正的高度最大值
void FormTrack::getTableSize_Head_Biggest(int &iHight)
{
iHight = 0;
//
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);
FormInfo *formInfo = qobject_cast<FormInfo*>(myWidget);//获得widget
if(formInfo)
{
iHight += formInfo->m_headHeight;
}
}
}
if(iHight == 0)
{
iHight = 100;
}
}
QJsonObject FormTrack::makeJson()
{
// 创建根对象

View File

@ -57,7 +57,8 @@ public:
QJsonObject makeJson();
QStringList getLineList(QString strWellName, QString strTrackName);
//展开FormIndo后获取真正的高度最大值
void getTableSize_Head_Biggest(int &iHight);
signals:
void sig_AddLine(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType, QStringList listOtherProperty={}, QString strObjUuid = "");
void sig_AddWave(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType);

View File

@ -1064,6 +1064,69 @@ void FormWell::getTableSize_Head(int &iHight)
}
}
void FormWell::vertScrollBarChanged_setGeometry(double value, double low, double upper)
{
//上移或下移
QRect geoRect = geometry();
//
double dDelta = value; //- upper
double dPercent = dDelta / (low-upper);
//move(0, -(dPercent*geoRect.height()));
setGeometry(0, -(dPercent*geoRect.height()), geoRect.width(), geoRect.height());
return;
}
//获取头2行的宽高方便输出图
void FormWell::getTableSize_Head_Biggest(int &iHight)
{
//获取可视视图大小 tableWidget
iHight = 0;
if(ui->tableWidget->rowCount()>0)
{
//高度
iHight = ui->tableWidget->rowHeight(0);
}
//
int iHight_Big = 0;
int columnCount = ui->tableWidget->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
if( ui->tableWidget->cellWidget(1, i) != nullptr )
{
auto myWidget = ui->tableWidget->cellWidget(1, i);
//
FormTrack *formTrack = (FormTrack*)myWidget;//获得widget
if(formTrack)
{
int iHight_Tmp = 0;
formTrack->getTableSize_Head_Biggest(iHight_Tmp);
if(iHight_Tmp>iHight)
{
iHight_Big = iHight_Tmp;
}
}
}
}
if(iHight_Big==0)
{
iHight_Big = m_nObjLyrH;
}
//
if(iHight == 0)
{
iHight = 100 + m_nObjLyrH;
}
else
{
iHight = iHight + iHight_Big;
}
}
//获取各行的高度
void FormWell::getRowHeight_Well(int &iHight1, int &iHight2, int &iHight3)
{
@ -1091,3 +1154,27 @@ void FormWell::setRowHeight_Well(int iHight1, int iHight2, int iHight3)
ui->tableWidget->update();
}
}
//隐藏道头/对象头
void FormWell::HideTableHead()
{
if(ui->tableWidget->rowCount()>0)
{
//高度
ui->tableWidget->hideRow(0);
ui->tableWidget->hideRow(1);
ui->tableWidget->update();
}
}
void FormWell::ShowTableHead()
{
if(ui->tableWidget->rowCount()>0)
{
//高度
ui->tableWidget->showRow(0);
ui->tableWidget->showRow(1);
ui->tableWidget->update();
}
}

View File

@ -84,10 +84,17 @@ public:
//获取当前井的所有道名称
QStringList getTrackNameList();
void getTableSize_Head(int &iHight);
void getTableSize_Head(int &iHight);
void getTableSize_Head_Biggest(int &iHight);//展开FormIndo后获取真正的高度最大值
void getRowHeight_Well(int &iHight1, int &iHight2, int &iHight3);
void setRowHeight_Well(int iHight1, int iHight2, int iHight3);
void vertScrollBarChanged_setGeometry(double value, double low, double upper);
//隐藏道头/对象头
void HideTableHead();
void ShowTableHead();
public slots:
//void onTableColumnsInserted(const QModelIndex &parent, int first, int last);

View File

@ -57,6 +57,10 @@ int g_iDebug = 0;
//SmallPrint
int g_iSmallPrint = 0;
//Step
int g_iStep = 300;
int g_iPageStep = 1500;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
@ -205,6 +209,13 @@ void MainWindow::ReadConfig()
int iSmallPrint = 0;
qtCommon->readSmallPrint(configPath, iSmallPrint);
g_iSmallPrint = iSmallPrint;
//滚动条步长
int iStep = 0;
int iPageStep = 0;
qtCommon->readStep(configPath, iStep, iPageStep);
g_iStep = iStep;
g_iPageStep = iPageStep;
}
void MainWindow::loadStyle(const QString &qssFile)

View File

@ -51,6 +51,9 @@ extern int g_WorkSpace_Height;
extern int g_iDebug;
extern int g_iStep;
extern int g_iPageStep;
//SmallPrint
extern int g_iSmallPrint;
@ -121,11 +124,18 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) :
ui->tableWidget_2->verticalScrollBar()->setDisabled(true); // 禁用滚动
ui->tableWidget_2->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏垂直滚动条
//自定义滚动条
ui->verticalScrollBar->setRange(-m_iY2, -m_iY1);
ui->verticalScrollBar->setValue(-m_iY2);
ui->verticalScrollBar->setRange(-m_iY2*100, -m_iY1*100);
ui->verticalScrollBar->setValue(-m_iY2*100);
ui->verticalScrollBar->setSingleStep(g_iStep);
ui->verticalScrollBar->setPageStep(g_iPageStep);
connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(vertScrollBarChanged(int)));
connect(CallManage::getInstance(), SIGNAL(sig_changeScrollBar(QString)), this, SLOT(s_changeScrollBar(QString)));
//
ui->verticalScrollBar_2->setRange(0, 100);
ui->verticalScrollBar_2->setValue(0);
connect(ui->verticalScrollBar_2, SIGNAL(valueChanged(int)), this, SLOT(vertScrollBarChanged_Head(int)));
connect(this, SIGNAL(sig_NewTrackChangeWidth(QString, double)), this, SLOT(s_NewTrackChangeWidth(QString, double)));
//connect(this, SIGNAL(sig_NewWell(QString, QString)), this, SLOT(s_NewWell(QString, QString)));
@ -236,8 +246,52 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) :
isScale[3]=m_isPrint;
isScale[4]=m_isBMP;
QTimer::singleShot(100, this, [=]() {
//2个滚动条位置
SetScrollBar_Geometry();
});
}
void MainWindowCurve::SetScrollBar_Geometry()
{
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
//获取井well前2行的高度
int iTableSize_Head = 0;
getTableSize_Head(iTableSize_Head);
int iTableWellTrack_height = ui->tableWidget_2->rowHeight(0) + (5) + iTableSize_Head -1;
QRect geoRect2 = ui->verticalScrollBar_2->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);
//自定义滚动条(头)
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);
ui->verticalScrollBar_2->setValue(0);
//connect(ui->verticalScrollBar_2, SIGNAL(valueChanged(int)), this, SLOT(vertScrollBarChanged_Head(int)));
}
else
{
ui->verticalScrollBar_2->hide();
//
// //获取井well前2行的高度
// int iTableSize_Head = 0;
// getTableSize_Head(iTableSize_Head);
// int iTableWellTrack_height = ui->tableWidget_2->rowHeight(0) + (9+3) + iTableSize_Head -1 +13;
// //图片高度
// int iTotalSize_Height = (m_iY2-m_iY1) *100.0/(double)m_iScale * g_dPixelPerCm;
// iTotalSize_Height += iTableWellTrack_height ;//单道头
// //
// ui->verticalScrollBar->setRange(0, iTotalSize_Height);
}
}
void MainWindowCurve::SetNo()
{
if(m_SharedMemory.isAttached()) {
@ -275,6 +329,9 @@ void MainWindowCurve::resizeEvent(QResizeEvent *event)
m_nObjDrawH = sz.height() - nhei - m_nObjLayerH - 100 - 100;
// nhei mainToolBar的高度 m_nObjLyrH对象单元格高度 100头高度100井头高度
emit CallManage::getInstance()->sig_ResizeHeight(m_strUuid, m_nObjDrawH);
//2个滚动条位置
SetScrollBar_Geometry();
}
QToolBar * MainWindowCurve::getPluginToolBar()
@ -295,13 +352,55 @@ void MainWindowCurve::s_mouseWheel(QWheelEvent *event)
//event->accept(); // 确保事件被处理
}
//自定义滚动条
void MainWindowCurve::vertScrollBarChanged(int value)
//自定义滚动条(头)
void MainWindowCurve::vertScrollBarChanged_Head(int value)
{
//AppendConsole(PAI_INFO, "鼠标滚动开始");
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
int iTmp = value;
//
int iHight1=0;
int iHight2=0;
int iHight3=0;
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
widgetWell->getRowHeight_Well(iHight1, iHight2, iHight3);
//
widgetWell->setRowHeight_Well(iHight1, 100+value, iHight3);
}
}
}
}
int low = -m_iY1;
int upper = -m_iY2;
//通过原始的滚动条,整体滚动
ui->tableWidget_2->verticalScrollBar()->setValue(value);
}
//自定义滚动条
void MainWindowCurve::vertScrollBarChanged(int iValue)
{
double value = (double)iValue/100;
//AppendConsole(PAI_INFO, "鼠标滚动开始");
double low = -m_iY1;
double upper = -m_iY2;
int iHeightOfScreen = 30000;//QApplication::desktop()->height();
if(g_iHeight_MyCustom == 0)
@ -330,12 +429,74 @@ void MainWindowCurve::vertScrollBarChanged(int value)
if(m_iCurPage == iNumShow)
{
double iCurValue = dDelta - (iNumShow-1)*dScrollHeight;
//通知界面重设范围
emit CallManage::getInstance()->sig_vertScrollBarChanged_setGeometry(m_strUuid, iCurValue, dScrollHeight_setGeometry, 0, value);
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
//通知界面重设范围
emit CallManage::getInstance()->sig_vertScrollBarChanged_setGeometry(m_strUuid, iCurValue, dScrollHeight_setGeometry, 0, value);
}
else
{
if(m_iCurPage==1)
{
//通过原始的滚动条,整体滚动
ui->tableWidget_2->verticalScrollBar()->setValue(iCurValue*100.0/(double)m_iScale * g_dPixelPerCm);
}
else
{
//通知界面重设范围
emit CallManage::getInstance()->sig_vertScrollBarChanged_setGeometry(m_strUuid, iCurValue, dScrollHeight_setGeometry, 0, value);
}
}
// int columnCount = ui->tableWidget_2->columnCount();//总列数
// for(int i=0; i<columnCount; i++)
// {
// if(i%2==0)
// {
// }
// else
// {
// //空白列
// continue;
// }
// //
// if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
// {
// auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
// if(myWidget)
// {
// //
// FormWell *widgetWell = (FormWell*)myWidget;//获得widget
// if(widgetWell)
// {
// widgetWell->vertScrollBarChanged_setGeometry(iCurValue, dScrollHeight_setGeometry, 0);
// }
// }
// }
// }
}
else if(iNumShow>0)
{
m_iCurPage = iNumShow;
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
}
else
{
if(m_iCurPage>1)
{
//隐藏道头/对象头
HideTableHead();
}
else
{
//显示道头/对象头
ShowTableHead();
ShowTableHead_All();
}
}
//通知界面重设范围
double iCurValue = (iNumShow-1)*dScrollHeight + upper;
emit CallManage::getInstance()->sig_vertScrollBarChanged(m_strUuid, iCurValue, -m_iY1, -m_iY2);//(iNumShow-1)*dScrollHeight_setGeometry
@ -343,6 +504,19 @@ void MainWindowCurve::vertScrollBarChanged(int value)
else if(value==upper)
{
m_iCurPage = 1;
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
}
else
{
//显示道头/对象头
ShowTableHead();
ShowTableHead_All();
//通过原始的滚动条,整体滚动
ui->tableWidget_2->verticalScrollBar()->setValue(0);
}
//通知界面重设范围
double iCurValue = upper;
emit CallManage::getInstance()->sig_vertScrollBarChanged(m_strUuid, iCurValue, -m_iY1, -m_iY2);//(iNumShow-1)*dScrollHeight_setGeometry
@ -415,6 +589,7 @@ void MainWindowCurve::initMainToolBar()
// 设置为可选中
m_fixwellsectionHeaderAc->setCheckable(true); //锁头
m_fixwellsectionHeaderAc->setChecked(true);
m_blackAc->setCheckable(true); //黑白图
m_doubleHeadAc->setCheckable(true); //单曲线头
m_executeDepthShiftAc->setCheckable(true); //校深
@ -2727,10 +2902,10 @@ void MainWindowCurve::onTimer()
int step=ui->verticalScrollBar->pageStep();
if(step<1)
{
step=10;
step=300;
}
//
int maxval=-m_iY1;
int maxval=-m_iY1*100;
int val=ui->verticalScrollBar->value();
if(val+step<maxval)
{
@ -2738,7 +2913,7 @@ void MainWindowCurve::onTimer()
}
else
{
ui->verticalScrollBar->setValue(-m_iY2);
ui->verticalScrollBar->setValue(-m_iY2*100);
}
}
@ -3042,6 +3217,12 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
// changeDepthForPrint();
// }
//切换回锁头模式
m_fixwellsectionHeaderAc->setChecked(true);
ShowTableHead_All();
ui->tableWidget_2->verticalScrollBar()->setValue(0);
//--/////////////////////////////////
//重置行高
int iTableSize_Head_Tmp = 0;
@ -3221,7 +3402,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
bDoubleHead = false;
}
int iTableWellTrack_height = ui->tableWidget_2->rowHeight(0) + (9+3) + iTableSize_Head -1;
int iTableWellTrack_height = ui->tableWidget_2->rowHeight(0) + (9+3) + iTableSize_Head -1 +13;
//图片高度
int iTotalSize_Height = iHight_Head+iHight_Tail;
int iNum = dDeep/dScrollHeight;
@ -3296,7 +3477,8 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
mDepthProgress.SetDepth(1);
//
ui->verticalScrollBar->hide(); //隐藏右侧滚动条
ui->verticalScrollBar->setValue(-m_iY2);//设置右侧滚动条
ui->verticalScrollBar_2->hide(); //隐藏右侧滚动条
ui->verticalScrollBar->setValue(-m_iY2*100);//设置右侧滚动条
ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), iMaxWidth, iHight+40);
QPixmap pPixmap_wellTrackInfo = this->grab(QRect(geoRect.x(), geoRect.y(), iMaxWidth, iTableWellTrack_height));
//保存,方便查看
@ -3342,7 +3524,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
// }
newValue_last = newValue;
//ui->verticalScrollBar->setValue(newValue);//设置右侧滚动条
//ui->verticalScrollBar->setValue(newValue*100);//设置右侧滚动条
//通知界面重设范围
emit CallManage::getInstance()->sig_vertScrollBarChanged(m_strUuid, newValue, -m_iY1, -m_iY2);
//通知界面重设范围(三图一表)
@ -3361,7 +3543,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
if(IsBmp == 0 || IsBmp == 4)
{
//pdf,svg
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen)*iLoop, pPixmap);
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen-2)*iLoop, pPixmap);
}
else
{
@ -3370,7 +3552,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
}
else{
ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), iMaxWidth, iHight+40);
QPixmap pPixmap = this->grab(QRect(geoRect.x(), geoRect.y()+iTableWellTrack_height, iMaxWidth, iHeightOfScreen));
QPixmap pPixmap = this->grab(QRect(geoRect.x(), geoRect.y()+iTableWellTrack_height, iMaxWidth, iHeightOfScreen-2));
//保存,方便查看
if(g_iDebug)
{
@ -3379,7 +3561,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
if(IsBmp == 0 || IsBmp == 4)
{
//pdf,svg
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen)*iLoop, pPixmap);
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen-2)*iLoop, pPixmap);
}
else
{
@ -3398,9 +3580,9 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
mDepthProgress.SetShowName(s);
mDepthProgress.SetDepth(iNumShow+2);
//
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen)*(iNum-1) + (dLastHeight), pPixmap_wellTrackInfo);
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen-2)*(iNum-1) + (dLastHeight), pPixmap_wellTrackInfo);
//尾
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height*2 + (iHeightOfScreen)*(iNum-1) + (dLastHeight), pPixmap_Tail);
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height*2 + (iHeightOfScreen-2)*(iNum-1) + (dLastHeight), pPixmap_Tail);
//结束
painter.end();
}
@ -3409,7 +3591,7 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
mDepthProgress.SetShowName(s);
mDepthProgress.SetDepth(iNumShow+1);
//尾
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen)*(iNum-1) + (dLastHeight), pPixmap_Tail);
painter.drawPixmap(0, iHight_Head + iTableWellTrack_height + (iHeightOfScreen-2)*(iNum-1) + (dLastHeight), pPixmap_Tail);
//结束
painter.end();
}
@ -3450,11 +3632,12 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
m_dock1->hide();
m_dock2->hide();
//
m_fixwellsectionHeaderAc->setChecked(false);//锁头不选中
m_fixwellsectionHeaderAc->setChecked(true);//锁头选中
}
//中间
ui->centralwidget->show();
ui->verticalScrollBar->show(); //恢复右侧滚动条
ui->verticalScrollBar_2->show(); //恢复右侧滚动条
ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height());
bool bOK = true;
@ -3513,8 +3696,14 @@ void MainWindowCurve::_slotExport(QPrinter &printer, int IsBmp, QString pngName,
// changeDepthForPrint();
// }
//ui->verticalScrollBar->setValue(-m_iY1);//设置右侧滚动条
ui->verticalScrollBar->setValue(newValue_last);//设置右侧滚动条
//ui->verticalScrollBar->setValue(-m_iY1*100);//设置右侧滚动条
ui->verticalScrollBar->setValue(newValue_last*100);//设置右侧滚动条
//
ShowTableHead_One();
//2个滚动条位置
SetScrollBar_Geometry();
if(bOK)
{
QMessageBox::information(NULL,"提示","图件输出完成!",QMessageBox::Ok);
@ -3617,10 +3806,22 @@ void MainWindowCurve::s_selectWell()
//显示/隐藏图头
void MainWindowCurve::s_showHeadTable()
{
if(m_dock1->isVisible())
//显示道头/对象头
ShowTableHead();
//if(m_dock1->isVisible())
if(m_fixwellsectionHeaderAc->isChecked())
{
m_dock1->hide();
m_dock2->hide();
//
ui->verticalScrollBar_2->show();
ShowTableHead_One();
//通过原始的滚动条,整体滚动
//ui->tableWidget_2->verticalScrollBar()->setValue(0);
//2个滚动条位置
SetScrollBar_Geometry();
ui->verticalScrollBar->setValue(-m_iY2*100);
}
else {
//第一次显示判断是否从json加载
@ -3636,8 +3837,32 @@ void MainWindowCurve::s_showHeadTable()
strHeadOrTail = "Tail"; //Head代表图头 Tail代表成果表
m_formMultiTails->DisplayHeads(m_tailsArray, strHeadOrTail);
}
m_dock1->show();
m_dock2->show();
//判断头宽
int iWidth_Head, iHight_Head;
m_formMultiHeads->getTableSize(iWidth_Head, iHight_Head);
if(iWidth_Head==0 || iHight_Head==0)
{
}
else
{
m_dock1->show();
}
//判断尾宽
int iWidth_Tail, iHight_Tail;
m_formMultiTails->getTableSize(iWidth_Tail, iHight_Tail);
if(iWidth_Tail==0 || iHight_Tail==0)
{
}
else
{
m_dock2->show();
}
//
ui->verticalScrollBar_2->hide();
//通过原始的滚动条,整体滚动
//ui->tableWidget_2->verticalScrollBar()->setValue(0);
ShowTableHead_All();
ui->verticalScrollBar->setValue(-m_iY2*100);
}
}
@ -4812,8 +5037,8 @@ void MainWindowCurve::Open(QString fileFull)
qDebug() << "JSON 模板文件读取成功!";
//重置右侧滚动条
ui->verticalScrollBar->setRange(-m_iY2, -m_iY1);
ui->verticalScrollBar->setValue(-m_iY2);
ui->verticalScrollBar->setRange(-m_iY2*100, -m_iY1*100);
ui->verticalScrollBar->setValue(-m_iY2*100);
QMessageBox::information(NULL,"提示","模板加载完成!",QMessageBox::Ok);
} else {
@ -5008,8 +5233,8 @@ void MainWindowCurve::s_changeDepth(QString strUuid, QString strSlfName, QString
m_iY1 = iY1;
m_iY2 = iY2;
//自定义滚动条
ui->verticalScrollBar->setRange(-m_iY2, -m_iY1);
ui->verticalScrollBar->setValue(-m_iY2);
ui->verticalScrollBar->setRange(-m_iY2*100, -m_iY1*100);
ui->verticalScrollBar->setValue(-m_iY2*100);
double dHight = 0;
dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm;
@ -5406,36 +5631,91 @@ void MainWindowCurve::resizeItem(QString strWellName, double colWidth, double ro
void MainWindowCurve::slotContextMenu(QPoint pos)
{
if(ui->tableWidget_2->columnCount()==0)
//锁头
if(m_fixwellsectionHeaderAc->isChecked())
{
return;
}
if(ui->tableWidget_2->columnCount()==0)
{
return;
}
int column = ui->tableWidget_2->currentColumn();//列编号从0开始
if(column<0)
{
//当前没有选中井
QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
return;
}
int column = ui->tableWidget_2->currentColumn();//列编号从0开始
if(column<0)
{
//当前没有选中井
QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
return;
}
if(column%2==0)
{
if(column%2==0)
{
}
else
{
//空白列
QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
return;
}
//当前行
int iCurrentRow = ui->tableWidget_2->currentRow();
if(iCurrentRow == 0)
{
QMenu menu(ui->tableWidget_2);
menu.addAction(QIcon(::GetImagePath() + "antialiasing.png"), "删除当前测井图", this, &MainWindowCurve::slotDeleteSelectWell);
menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新当前测井数据", this, &MainWindowCurve::slotRefreshWell);
menu.exec(ui->tableWidget_2->mapToGlobal(pos));
}
}
else
{
//空白列
QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
return;
}
//当前行
int iCurrentRow = ui->tableWidget_2->currentRow();
if(iCurrentRow == 0)
{
QMenu menu(ui->tableWidget_2);
menu.addAction(QIcon(::GetImagePath() + "antialiasing.png"), "删除当前测井图", this, &MainWindowCurve::slotDeleteSelectWell);
menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新当前测井数据", this, &MainWindowCurve::slotRefreshWell);
menu.exec(ui->tableWidget_2->mapToGlobal(pos));
//没锁头
if(ui->tableWidget_2->columnCount()==0)
{
QMenu menuHeadorTail(this);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建图头", this, &MainWindowCurve::slotCreateHead);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建成果表", this, &MainWindowCurve::slotCreateTail);
menuHeadorTail.exec(pos);
return;
}
int column = ui->tableWidget_2->currentColumn();//列编号从0开始
if(column<0)
{
//当前没有选中井
//QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
QMenu menuHeadorTail(this);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建图头", this, &MainWindowCurve::slotCreateHead);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建成果表", this, &MainWindowCurve::slotCreateTail);
menuHeadorTail.exec(pos);
return;
}
if(column%2==0)
{
}
else
{
//空白列
//QMessageBox::warning(this, "提示", "当前没有选中井", "确定");
QMenu menuHeadorTail(this);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建图头", this, &MainWindowCurve::slotCreateHead);
menuHeadorTail.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建成果表", this, &MainWindowCurve::slotCreateTail);
menuHeadorTail.exec(ui->tableWidget_2->mapToGlobal(pos));
return;
}
//当前行
int iCurrentRow = ui->tableWidget_2->currentRow();
if(iCurrentRow == 0)
{
QMenu menu(ui->tableWidget_2);
menu.addAction(QIcon(::GetImagePath() + "antialiasing.png"), "删除当前测井图", this, &MainWindowCurve::slotDeleteSelectWell);
menu.addAction(QIcon(::GetImagePath() + "icon/CopyCoreTxt.png"), "刷新当前测井数据", this, &MainWindowCurve::slotRefreshWell);
//
menu.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建图头", this, &MainWindowCurve::slotCreateHead);
menu.addAction(QIcon(::GetImagePath() + "icon/Edit.png"), "创建成果表", this, &MainWindowCurve::slotCreateTail);
menu.exec(ui->tableWidget_2->mapToGlobal(pos));
}
}
}
@ -5566,6 +5846,60 @@ void MainWindowCurve::getTableSize_Head(int &iHight)
}
}
void MainWindowCurve::getTableSize_Head_Biggest(int &iHight)
{
//获取可视视图大小 well井
iHight = 0;
int columnCount = ui->tableWidget_2->columnCount();//总列数
if(columnCount ==0)
{
if(iHight == 0)
{
iHight = 100 + m_nObjLayerH;
}
return;
}
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
//
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
int iHight_Tmp = 0;
widgetWell->getTableSize_Head_Biggest(iHight_Tmp);
if(iHight_Tmp>iHight)
{
iHight = iHight_Tmp;
}
}
}
}
}
//
if(iHight == 0)
{
iHight = 100 + m_nObjLayerH;
}
}
//重新设置well表格高度防止有人拖拽改变高度后出图高度不一致
//默认采用第1口井的表格高度
void MainWindowCurve::setTableSize_Well()
@ -5631,9 +5965,167 @@ void MainWindowCurve::s_changeScrollBar(QString strUuid)
return;
}
ui->verticalScrollBar->setValue(-m_iY2);//-m_iY2
ui->verticalScrollBar->setValue(-m_iY2*100);//-m_iY2
// int iCurValue = ui->verticalScrollBar->value();
// vertScrollBarChanged(iCurValue);
// //ui->verticalScrollBar->setValue(iCurValue+1);//-m_iY2
}
//隐藏道头/对象头
void MainWindowCurve::HideTableHead()
{
ui->tableWidget_2->hideRow(0);
ui->tableWidget_2->update();
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
//
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
widgetWell->HideTableHead();
}
}
}
}
}
void MainWindowCurve::ShowTableHead()
{
ui->tableWidget_2->showRow(0);
ui->tableWidget_2->update();
//ShowTableHead_All();
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
//
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
widgetWell->ShowTableHead();
}
}
}
}
}
void MainWindowCurve::ShowTableHead_All()
{
//展示所有遮挡的FormInfo头
int iTableSize_Head_Biggest = 0;
getTableSize_Head_Biggest(iTableSize_Head_Biggest);
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
//
int iHight1=0;
int iHight2=0;
int iHight3=0;
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
widgetWell->getRowHeight_Well(iHight1, iHight2, iHight3);
//
widgetWell->setRowHeight_Well(100, iTableSize_Head_Biggest+4-100, iHight3);
}
}
}
}
}
void MainWindowCurve::ShowTableHead_One()
{
//展示1个FormInfo头
//
int columnCount = ui->tableWidget_2->columnCount();//总列数
//
for(int i=0; i<columnCount; i++)
{
if(i%2==0)
{
}
else
{
//空白列
continue;
}
//
int iHight1=0;
int iHight2=0;
int iHight3=0;
if( ui->tableWidget_2->cellWidget(1, 0) != nullptr )
{
auto myWidget = ui->tableWidget_2->cellWidget(1, 0);
if(myWidget)
{
//
FormWell *widgetWell = (FormWell*)myWidget;//获得widget
if(widgetWell)
{
widgetWell->getRowHeight_Well(iHight1, iHight2, iHight3);
//
widgetWell->setRowHeight_Well(100, m_nObjLayerH, iHight3);
}
}
}
}
}
//打开成果表
void MainWindowCurve::slotCreateHead()
{
m_dock1->show();
}
//打开成果表
void MainWindowCurve::slotCreateTail()
{
m_dock2->show();
}

View File

@ -45,7 +45,14 @@ protected:
public:
void resizeItem(QString strWellName, double tempWidth, double tempHight);
void getTableSize_Head(int &iHight);
void getTableSize_Head_Biggest(int &iHight);//展开FormIndo后获取真正的高度最大值
void setTableSize_Well();
//隐藏道头/对象头
void HideTableHead();
void ShowTableHead();
//
void ShowTableHead_All();
void ShowTableHead_One();
public slots:
void dragEnterEvent(QDragEnterEvent* event);
@ -58,6 +65,12 @@ public slots:
//自定义滚动条
void vertScrollBarChanged(int value);
//自定义滚动条(头)
void vertScrollBarChanged_Head(int value);
//打开图头,成果表
void slotCreateHead();
void slotCreateTail();
public:
MainWindowSplitter* m_pParentWin = NULL;
@ -113,6 +126,7 @@ public:
void SetIsColorPrint(bool iscolorprint);
bool GetIsColorPrint();
void SetNo();
void SetScrollBar_Geometry();
public:
//展示所有井

View File

@ -36,11 +36,22 @@
<widget class="QTableWidget" name="tableWidget_2"/>
</item>
<item>
<widget class="QScrollBar" name="verticalScrollBar">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,6">
<item>
<widget class="QScrollBar" name="verticalScrollBar_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QScrollBar" name="verticalScrollBar">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>

View File

@ -95,3 +95,15 @@ void QtCommonClass::setButtonIconWithText(QPushButton *button, const QString &im
button->setFlat(true);//就是这句能够实现按钮透明用png图片时很有用
button->setStyleSheet("border: 0px");//消除边框,取消点击效果
}
//滚动条步长
double QtCommonClass::readStep(QString filePathName, int &iStep, int &iPageStep)
{
QSettings set(filePathName, QSettings::IniFormat);
set.beginGroup("config");
iStep = set.value("iStep", "600").toInt();
iPageStep = set.value("iPageStep", "1500").toInt();
set.endGroup();
return 0;
}

View File

@ -25,6 +25,8 @@ public:
double readDebug(QString filePathName, int &iDebug);
//Small模式出图的原始图片是否采用小图片(默认0:大图--缺点出图时占用内存大, 1:小图--缺点小图拼接容易有缝隙)
double readSmallPrint(QString filePathName, int &iSmallPrint);
//滚动条步长
double readStep(QString filePathName, int &iStep, int &iPageStep);
double readXyRange(QString filePathName, int &iX1, int &iX2, int &iY1, int &iY2);