Skip to content

Commit

Permalink
弹窗使用拷贝pixmap再绘制,而不是直接绘制*pixmap(双线程读写引发界面闪动)
Browse files Browse the repository at this point in the history
  • Loading branch information
iwxyi committed Apr 30, 2020
1 parent a07d6b1 commit dfffe42
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 11 deletions.
17 changes: 8 additions & 9 deletions slimscrollbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

SlimScrollBar::SlimScrollBar(QWidget *parent) : QScrollBar(parent)
{
popup = new SlimScrollBarPopup(nullptr);
/*popup = new SlimScrollBarPopup(nullptr);
popup->pixmap = &pixmap;
popup->show();
popup->setGeometry(-2, -2, 0, 0);
popup->setGeometry(-2, -2, 0, 0);*/

setStyleSheet("\
QScrollBar:vertical\
Expand Down Expand Up @@ -359,8 +359,8 @@ void SlimScrollBar::eventTimer()
popuping = false;
popup->setGeometry(-2, -2, 0, 0);
// 删除popup
// popup->deleteLater();
// popup = nullptr;
popup->deleteLater();
popup = nullptr;
}
}

Expand Down Expand Up @@ -451,7 +451,6 @@ void SlimScrollBar::calcPixmapSize()
pixmap = QPixmap(QSize(wi, he));
popup_offset.setX(0-leftest);
popup_offset.setY(0-topest);
qDebug () << "pixmap size" << QSize(wi, he) << popup_offset;
}

/**
Expand All @@ -461,12 +460,12 @@ void SlimScrollBar::calcPixmapSize()
void SlimScrollBar::startPopup()
{
popuping = true;
/*if (!popup)
if (!popup)
{
popup = new SlimScrollBarPopup(nullptr);
popup->pixmap = &pixmap;
popup->scrollbar_pixmap = pixmap;
popup->show();
}*/
}

paintPixmap();
repaintPopup();
Expand All @@ -481,7 +480,7 @@ void SlimScrollBar::repaintPopup()
popup->setGeometry(QRect(mapToGlobal(pos())-popup_offset, pixmap.size()));
// 设置绘制位置
popup->offset = popup_offset;
popup->scrollbar_pixmap = pixmap;
// 绘制图片
popup->update();
this->setFocus();
}
2 changes: 1 addition & 1 deletion slimscrollbarpopup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ void SlimScrollBarPopup::paintEvent(QPaintEvent *)
QPainter painter(this);
painter.fillRect(0, 0, width()-1, height()-1, QColor(0x33, 0xFF, 0xff, 0x33));

painter.drawPixmap(offset, *pixmap);
painter.drawPixmap(offset, scrollbar_pixmap);
}
2 changes: 1 addition & 1 deletion slimscrollbarpopup.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class SlimScrollBarPopup : public QWidget
public slots:

private:
QPixmap* pixmap = nullptr;
QPixmap scrollbar_pixmap;
QPoint offset;
};

Expand Down

0 comments on commit dfffe42

Please sign in to comment.