第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

QGraphicsView.fitInView 令人費(fèi)解的行為

QGraphicsView.fitInView 令人費(fèi)解的行為

阿波羅的戰(zhàn)車 2023-03-01 17:51:51
我正在嘗試制作一個(gè)帶有兩個(gè) QGraphicsView 的小部件,以并排比較兩個(gè)圖像。當(dāng)用戶放大其中一個(gè)視圖時(shí),另一個(gè)視圖應(yīng)放大到同一區(qū)域。我的 zoomIn 函數(shù)發(fā)送一個(gè)帶有可見場景矩形的信號,另一個(gè)視圖中的一個(gè)槽捕獲這個(gè)信號并調(diào)用QGraphicsView.fitInView(rectangle)使相同的圖像區(qū)域可見。令我驚訝的是,fitInView似乎將矩形 (x, y, width, height) 視為 (x, y, x + width, y + height)。這是一個(gè)錯(cuò)誤還是我遺漏了什么?這是我的代碼示例:子QGraphicsView類import loggingfrom PyQt5 import (    QtWidgets as qw,    QtCore as qc,    QtGui as qg)class Display(qw.QGraphicsView):    sigViewportAreaChanged = qc.pyqtSignal(qc.QRectF)    def __init__(self, *args, **kwargs):        super(Display, self).__init__(*args, **kwargs)        ..        self.zoomInAction = qw.QAction('Zoom in')        self.zoomInAction.triggered.connect(self.zoomIn)    @qc.pyqtSlot()    def zoomIn(self):        self.scale(1.2, 1.2)        pos = self.viewport().pos()        size = self.viewport().size()        logging.debug(f'{self.objectName()}: viewport:: pos: {pos}, size: {size}')        pos = self.mapToScene(pos)        size = self.mapToScene(size.width(), size.height())        logging.debug(f'{self.objectName()}: scene:: pos: {pos}, size: {size}')        view_area = qc.QRectF(pos.x(), pos.y(), size.x(), size.y())        logging.debug(            f'Emitting changed viewport area, {view_area},\n{mat}')        self.sigViewportAreaChanged.emit(view_area)
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

我相信你的計(jì)算方式size是錯(cuò)誤的。您應(yīng)該相對于 的翻譯值來計(jì)算它pos。既然知道寬高的值,那么就可以view_area根據(jù) 的場景值計(jì)算 的右下角pos。


viewport_pos = self.viewport().pos()

scene_pos = self.mapToScene(viewport_pos)


width = self.viewport().size().width()

height = self.viewport().size().height()


lower_right_corner = QPointF(width - scene_pos.x(), height() - scene_pos.y())

如果沒有減法,您假設(shè)的原點(diǎn)view_area是 ,(0, 0)而實(shí)際上它是pos。


查看完整回答
反對 回復(fù) 2023-03-01
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

為了將尺寸縮放到場景坐標(biāo)系,我將尺寸作為一個(gè)點(diǎn)傳遞給mapToScene.


但是點(diǎn)和大小在概念上是不同的,雖然大小不依賴于坐標(biāo)系的原點(diǎn),但點(diǎn)是。 mapToScene,將其論點(diǎn)視為一個(gè)點(diǎn),正在將其翻譯以反映新的坐標(biāo)系。


因此我需要減去新坐標(biāo)系的原點(diǎn),它實(shí)際上是視口的左上角,以取回尺寸。


一個(gè)更簡單的解決方案是直接映射視口矩形:


rect = self.mapToScene(self.viewport().rect())  

rect = rect.boundingRect() # mapToScene(rect) returns QPolygonF

self.sigViewportAreaChanged.emit(rect)


查看完整回答
反對 回復(fù) 2023-03-01
  • 2 回答
  • 0 關(guān)注
  • 581 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號