我有一個QGraphicsView
子類,在QWidget
的內部持有QGraphicsScene
子類。將QGraphicsView左上移動到QGraphicsScene中的某個點手動
QGraphicsScene
有一個實際的繪製矩形,頂部讓角落在(0,0)(所以場景確實有一個QRectF(-x,-y,w,h)
的值與問題無關)。
在啓動時,實際上在窗口小部件的showEvent
中,我將場景的大小設置爲適合自定義大小的矩形。這也是它的中心。
我想要的是在開始時將場景的(0,0)點與視圖的左上角相匹配。
與其他題目相同的問題不同,我實際上需要移動視圖,而不是場景中的項目。
圖片1:實際開始,像2:所需
我想:
void MyWidget::showEvent(QShowEvent *event)
{
static bool startUp = true;
if(startUp)
{
QSizeF sz = m_scene->getActualSize();
ui->graphicsView->fitInView(QRectF(0, 0, sz.width(), sz.height()), Qt::KeepAspectRatio);
QPointF zero = ui->graphicsView->mapFromScene(QPointF(0,0));
ui->graphicsView->translate(-zero.x(), -zero.y()); // or positive
startUp = false;
}
QWidget::showEvent(event);
}
注:我用的是fitInView
獲得所需的縮放 - 它也帶來所需的矩形焦點 - 但集中在視圖中。
我也試過
void GraphicsView::alignToZero()
{
QPointF zero = this->mapFromScene(QPointF(0,0));
this->scrollContentsBy(-zero.x(), -zero.y());
}
void MyWidget::showEvent(QShowEvent *event)
{
static bool startUp = true;
if(startUp)
{
QSizeF sz = m_scene->getActualSize();
ui->graphicsView->fitInView(QRectF(0, 0, sz.width(), sz.height()), Qt::KeepAspectRatio);
ui->graphicsView->alignToZero();
startUp = false;
}
QWidget::showEvent(event);
}
仍然沒有結果。
也試過
void MyWidget::showEvent(QShowEvent *event)
{
static bool startUp = true;
if(startUp)
{
QSizeF sz = m_scene->getActualSize();
ui->graphicsView->fitInView(QRectF(0, 0, sz.width(), sz.height()), Qt::KeepAspectRatio);
QPointF zero = ui->graphicsView->mapFromScene(QPointF(0,0));
//ui->graphicsView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
ui->graphicsView->horizontalScrollBar()->setValue(zero.x());
ui->graphicsView->verticalScrollBar()->setValue(zero.y());
startUp = false;
}
QWidget::showEvent(event);
}
此,有或沒有對齊設置(我認爲可能有其他地方的不良影響),移動視圖...太遠。