HGGitLab

Commit 1cc1a793 authored by luoliangyi's avatar luoliangyi

解决图像显示控件滚动条不能正常绘制的问题

parent 62f03368
......@@ -44,44 +44,79 @@ MainWindow::MainWindow(QWidget *parent)
connect(m_thumb, SIGNAL(itemDoubleClicked(int)), this, SLOT(on_itemDoubleClicked(int)));
m_view->enableScroll(true);
m_view->setScrollSize(16);
m_view->setMinScrollSliderSize(20);
HGImage img = NULL;
HGImgFmt_LoadImage("D:\\1.jpg", 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
m_view->addImage(img);
HGBase_DestroyImage(img);
QImage img2("D:\\ImageSrc\\image.png");
m_thumb->setDefItemImage(&img2);
m_thumb->setType(HGImgThumb::ThumbType_Grid);
m_thumb->setGapSize(10);
QImage defItemImage("D:\\ImageSrc\\defItemImage.png");
m_thumb->setDefItemImage(&defItemImage);
m_thumb->setType(HGImgThumb::ThumbType_Hori);
m_thumb->setItemSize(80);
//m_thumb->setItemTextHeight(0);
m_thumb->setScrollSize(10);
m_thumb->setScrollSize(16);
m_thumb->setMinScrollSliderSize(20);
QImage leftNormalImg("D:\\ImageSrc\\1.png");
QImage leftHotImg("D:\\ImageSrc\\2.png");
QImage leftPushImg("D:\\ImageSrc\\3.png");
QImage hScrollImage("D:\\ImageSrc\\hScrollImage.png");
m_thumb->setHScrollImage(&hScrollImage, NULL);
m_view->setHScrollImage(&hScrollImage, NULL);
QImage vScrollImage("D:\\ImageSrc\\vScrollImage.png");
m_thumb->setVScrollImage(&vScrollImage, NULL);
m_view->setVScrollImage(&vScrollImage, NULL);
QImage leftNormalImg("D:\\ImageSrc\\left_Normal.png");
QImage leftHotImg("D:\\ImageSrc\\left_Hot.png");
QImage leftPushImg("D:\\ImageSrc\\left_Push.png");
m_thumb->setHScrollLeftImage(&leftNormalImg, &leftHotImg, &leftPushImg);
m_thumb->setHScrollRightImage(&leftNormalImg, &leftHotImg, &leftPushImg);
m_thumb->setVScrollTopImage(&leftNormalImg, &leftHotImg, &leftPushImg);
m_thumb->setVScrollBottomImage(&leftNormalImg, &leftHotImg, &leftPushImg);
m_view->setHScrollLeftImage(&leftNormalImg, &leftHotImg, &leftPushImg);
QImage rightNormalImg("D:\\ImageSrc\\right_Normal.png");
QImage rightHotImg("D:\\ImageSrc\\right_Hot.png");
QImage rightPushImg("D:\\ImageSrc\\right_Push.png");
m_thumb->setHScrollRightImage(&rightNormalImg, &rightHotImg, &rightPushImg);
m_view->setHScrollRightImage(&rightNormalImg, &rightHotImg, &rightPushImg);
QImage topNormalImg("D:\\ImageSrc\\top_Normal.png");
QImage topHotImg("D:\\ImageSrc\\top_Hot.png");
QImage topPushImg("D:\\ImageSrc\\top_Push.png");
m_thumb->setVScrollTopImage(&topNormalImg, &topHotImg, &topPushImg);
m_view->setVScrollTopImage(&topNormalImg, &topHotImg, &topPushImg);
QImage bottomNormalImg("D:\\ImageSrc\\bottom_Normal.png");
QImage bottomHotImg("D:\\ImageSrc\\bottom_Hot.png");
QImage bottomPushImg("D:\\ImageSrc\\bottom_Push.png");
m_thumb->setVScrollBottomImage(&bottomNormalImg, &bottomHotImg, &bottomPushImg);
m_view->setVScrollBottomImage(&bottomNormalImg, &bottomHotImg, &bottomPushImg);
HGRect hSliderStretchRect = {4, 0, 196, 16};
QImage hScrollSliderNormalImage("D:\\ImageSrc\\hScrollSlider_Normal.png");
QImage hScrollSliderHotImage("D:\\ImageSrc\\hScrollSlider_Hot.png");
QImage hScrollSliderPushImage("D:\\ImageSrc\\hScrollSlider_Push.png");
m_thumb->setHScrollSliderImage(&hScrollSliderNormalImage, &hSliderStretchRect,
&hScrollSliderHotImage, &hSliderStretchRect, &hScrollSliderPushImage, &hSliderStretchRect);
m_view->setHScrollSliderImage(&hScrollSliderNormalImage, &hSliderStretchRect,
&hScrollSliderHotImage, &hSliderStretchRect, &hScrollSliderPushImage, &hSliderStretchRect);
HGRect vSliderStretchRect = {0, 4, 16, 196};
QImage vScrollSliderNormalImage("D:\\ImageSrc\\vScrollSlider_Normal.png");
QImage vScrollSliderHotImage("D:\\ImageSrc\\hvScrollSlider_Hot.png");
QImage vScrollSliderPushImage("D:\\ImageSrc\\vScrollSlider_Push.png");
m_thumb->setVScrollSliderImage(&vScrollSliderNormalImage, &vSliderStretchRect,
&vScrollSliderHotImage, &vSliderStretchRect, &vScrollSliderPushImage, &vSliderStretchRect);
m_view->setVScrollSliderImage(&vScrollSliderNormalImage, &vSliderStretchRect,
&vScrollSliderHotImage, &vSliderStretchRect, &vScrollSliderPushImage, &vSliderStretchRect);
QImage hScrollSliderImage("D:\\ImageSrc\\hScrollSlider.png");
HGRect hStretchRect = {20, 0, 60, 20};
//m_thumb->setHScrollSliderImage(&hScrollSliderImage, &hStretchRect, &hScrollSliderImage, &hStretchRect, &hScrollSliderImage, &hStretchRect);
#ifdef HG_CMP_MSC
QImage vScrollSliderImage("D:\\ImageSrc\\vScrollSlider.png");
HGRect vStretchRect = {0, 20, 20, 60};
//m_thumb->setVScrollSliderImage(&vScrollSliderImage, &vStretchRect, &vScrollSliderImage, &vStretchRect, &vScrollSliderImage, &vStretchRect);
HGImage img = NULL;
HGImgFmt_LoadImage("D:\\1.jpg", 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
m_view->addImage(img);
HGBase_DestroyImage(img);
#ifdef HG_CMP_MSC
for (int i = 0; i < 10000; ++i)
for (int i = 0; i < 10; ++i)
{
char fileName[256];
sprintf(fileName, "D:\\Pictures\\%d.jpg", i);
m_thumb->addItem(fileName);
}
#endif
}
......@@ -152,7 +187,7 @@ void MainWindow::on_act_fullscreen_triggered()
void MainWindow::on_currItemChanged(int index)
{
Q_UNUSED(index);
}
void MainWindow::on_itemDoubleClicked(int index)
......
......@@ -3035,6 +3035,10 @@ void HGImgThumb::mouseDoubleClickEvent(QMouseEvent *e)
if (m_curItemIndex == index && m_frontItems[index]->selected)
emit itemDoubleClicked(index);
}
else
{
QWidget::mouseDoubleClickEvent(e);
}
}
void HGImgThumb::on_updateItem()
......
......@@ -812,9 +812,9 @@ HGResult HGImgView::addImage(HGImage image)
GetMinShowImageRect(&rcWnd, info.width, info.height, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -834,9 +834,9 @@ HGResult HGImgView::clearImage()
memset(&m_showRect, 0, sizeof(HGRectF));
double scale = 0.0;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -881,9 +881,9 @@ HGResult HGImgView::rotateLeft()
GetMinShowImageRect(&rcWnd, info.width, info.height, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -917,9 +917,9 @@ HGResult HGImgView::rotateRight()
GetMinShowImageRect(&rcWnd, info.width, info.height, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -990,9 +990,9 @@ HGResult HGImgView::zoomIn(const HGPoint *pCenter)
recalcShowRect(this->width(), this->height(), m_scrollSize, m_hScroll, m_vScroll, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
}
return HGBASE_ERR_OK;
......@@ -1056,9 +1056,9 @@ HGResult HGImgView::zoomOut(const HGPoint *pCenter)
recalcShowRect(this->width(), this->height(), m_scrollSize, m_hScroll, m_vScroll, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
}
return HGBASE_ERR_OK;
......@@ -1099,9 +1099,9 @@ HGResult HGImgView::realSize()
recalcShowRect(this->width(), this->height(), m_scrollSize, m_hScroll, m_vScroll, m_showImage, m_showRect);
double scale = 1.0;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -1121,9 +1121,9 @@ HGResult HGImgView::fitWndSize()
GetMinShowImageRect(&rcWnd, info.width, info.height, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -1178,9 +1178,9 @@ HGResult HGImgView::fitWndWidth()
recalcShowRect(this->width(), this->height(), m_scrollSize, m_hScroll, m_vScroll, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
return HGBASE_ERR_OK;
}
......@@ -1228,7 +1228,7 @@ HGResult HGImgView::showColorInfo(bool show)
m_showColorInfo = show;
QToolTip::hideText();
updateCursor();
updateMoveStatusAndCursor();
return HGBASE_ERR_OK;
}
......@@ -1246,8 +1246,8 @@ void HGImgView::mousePressEvent(QMouseEvent* e)
m_mousePressStatus = mouseStatus;
m_mousePressBeginX = e->pos().x();
m_mousePressBeginY = e->pos().y();
updateMoveStatusAndCursor();
Show();
updateCursor();
return;
}
......@@ -1260,7 +1260,7 @@ void HGImgView::mousePressEvent(QMouseEvent* e)
m_operate = 1;
m_beginX = e->pos().x();
m_beginY = e->pos().y();
updateCursor();
updateMoveStatusAndCursor();
}
void HGImgView::mouseMoveEvent(QMouseEvent* e)
......@@ -1400,7 +1400,8 @@ void HGImgView::mouseMoveEvent(QMouseEvent* e)
QToolTip::hideText();
}
updateCursor();
updateMoveStatusAndCursor();
Show();
}
}
......@@ -1450,8 +1451,8 @@ void HGImgView::mouseReleaseEvent(QMouseEvent* e)
recalcShowRect(this->width(), this->height(), m_scrollSize, m_hScroll, m_vScroll, m_showImage, m_showRect);
}
updateMoveStatusAndCursor();
Show();
updateCursor();
}
void HGImgView::enterEvent(QEvent *e)
......@@ -1462,6 +1463,9 @@ void HGImgView::enterEvent(QEvent *e)
void HGImgView::leaveEvent(QEvent *e)
{
Q_UNUSED(e);
m_mouseMoveStatus = MouseStatus_Null;
Show();
}
void HGImgView::paintEvent(QPaintEvent* e)
......@@ -1743,8 +1747,8 @@ void HGImgView::resizeEvent(QResizeEvent* e)
emit scaleChanged(scale);
}
updateMoveStatusAndCursor();
Show();
updateCursor();
}
void HGImgView::keyPressEvent(QKeyEvent *e)
......@@ -1814,9 +1818,9 @@ void HGImgView::dropEvent(QDropEvent *e)
GetMinShowImageRect(&rcWnd, info.width, info.height, m_showImage, m_showRect);
double scale = (double)(m_showRect.right - m_showRect.left) / (double)info.width;
emit scaleChanged(scale);
updateMoveStatusAndCursor();
Show();
updateCursor();
emit scaleChanged(scale);
}
}
......@@ -2044,8 +2048,10 @@ void HGImgView::reset()
m_beginY = -1;
}
void HGImgView::updateCursor()
void HGImgView::updateMoveStatusAndCursor()
{
m_mouseMoveStatus = getMouseStatus(mapFromGlobal(QCursor::pos()));
if (0 != m_operate)
{
setCursor(Qt::ClosedHandCursor);
......@@ -2056,9 +2062,10 @@ void HGImgView::updateCursor()
}
else
{
MouseStatus mouseStatus = getMouseStatus(mapFromGlobal(QCursor::pos()));
QRect rcWnd(0, 0, this->width(), this->height());
if (NULL == m_image || !m_showImage
|| !m_showColorInfo || MouseStatus_Null != mouseStatus)
|| !m_showColorInfo || MouseStatus_Null != m_mouseMoveStatus
|| !rcWnd.contains(mapFromGlobal(QCursor::pos())))
{
setCursor(Qt::ArrowCursor);
}
......
......@@ -86,7 +86,7 @@ private:
static void DrawImage(QPainter &painter, const QRect &destRect, const QImage *image, const QRect &stretchRect);
void reset();
void updateCursor();
void updateMoveStatusAndCursor();
MouseStatus getMouseStatus(const QPoint &pt);
QRect getHScrollLeftPos();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment