簡體   English   中英

當我在Qt上調整圖像大小時,如何聚焦到小部件的中間點?

[英]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()

  1. 您不將QScrollBar::width混合到QScrollBar::maximum嗎? 他們關系不好。
  2. 您最好不要觸摸視圖的滾動條。 嘗試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。

  3. 正如@mvidelgauz所假定的,為什么不在場景中縮放QGraphicsPixmapItem? 這可能是重新縮放的更好解決方案嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM