[英]When I resize an image on Qt, how can I focus to middle point of widget?
我可以使用滑塊更改圖像的分辨率。 我使用QGraphicsScene
來顯示圖像,但是問題是當我調整圖像大小時,我無法聚焦到一點,您可以在這里看到我的代碼。
這是第一部分,因此可以調整圖像大小。
void MainWindow::on_sld_scale_valueChanged(int value) {
//for resize an image with slider
int w = m_image->width();
int h = m_image->height();
int new_w = (w * value)/100;
int new_h = (h * value)/100;
m_pixmap = QPixmap::fromImage(
m_image->scaled(new_w, new_h, Qt::KeepAspectRatio, Qt::FastTransformation));
這是我函數的第二部分,這是我將算法聚焦到小部件的中間點的方法,但是它不起作用。
//for focus to middle point of widget
auto views = m_scene->views();
Q_ASSERT(views.size() == 1);
auto view = views.first();
int pos_x = view->horizontalScrollBar()->value();
int pos_y = view->verticalScrollBar()->value();
show_pixmap();
qDebug() << "x" << pos_x << "w" << view->width()
<< "sbw" << view->verticalScrollBar()->width()
<< "y" << pos_y << "h" << view->height()
<< "sbh" << view->horizontalScrollBar()->height();
int a = pos_x + (view->width()) + (view->verticalScrollBar()->width());
int b = pos_x + (view->height()) + (view->horizontalScrollBar()->height());
a = a * (value/100.0);
b = b * (value/100.0);
m_pixmap = QPixmap::fromImage(*m_image);
view->horizontalScrollBar()->setValue(a);
view->verticalScrollBar()->setValue(b);
}
這是我的源代碼。我可以調整圖像大小,但不能集中到中間點。您能幫我解決這個問題嗎?
不要重新創建像素圖,請使用QGraphicsView
的方法setResizeAnchor()
和scale()
QScrollBar::width
混合到QScrollBar::maximum
嗎? 他們關系不好。 您最好不要觸摸視圖的滾動條。 嘗試QGraphicsView::centerOn
甚至QGraphicsView::fitInView
(您是說“焦點”是“放置在視圖中心”嗎?)。 像這樣:
const qreal centerX = pixmapItem->x() + pixmapItem->width() / 2; const qreal centerY = pixmapItem->y() + pixmapItem->height() / 2; viewer->centerOn(centerX , centerY);
其中pixmapItem
是QGraphicsPixmapItem。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.