2012-11-17 6 views
1

У меня есть QGraphicsView, который отображает мою игру. Этот вид всегда заполняет весь экран. В правом верхнем углу у меня есть еще один QGraphicsView, который я использую в качестве мини-карты; он сидит над игровым представлением. Я хочу, чтобы эта мини-карта была привязана к верхней правой части экрана, всегда сохраняя ее размер. Этот код почти работает, за исключением того, что левая сторона мини-карты никогда не изменяется (это to be expected).Закрепление QGraphicsView в углу экрана

void MainWindow::resizeEvent(QResizeEvent *event) 
{ 
    mainWindow->graphicsView->resize(event->size().width(), event->size().height()); 
    QRect newRect(mainWindow->miniMapGraphicsView->geometry()); 
    newRect.setRight(event->size().width() - 20); 
    mainWindow->miniMapGraphicsView->setGeometry(newRect); 
} 

Как это сделать?

ответ

1

Если вы хотите позиционировать виджетов определенным образом, макеты, как правило, лучший способ сделать это.

Добавить QFormLayout в ваш graphicsView и установить его layoutDirection на Qt::RightToLeft. Затем добавьте miniMapGraphicsView в макет. Редактируя свойства мини-карты, установите ее горизонтальный и вертикальный sizePolicy на Fixed и установите его minimumSize и maximumSize на размеры, которые вы хотели бы быть.

Альтернативой может быть использование QGridLayout и использование горизонтальных и вертикальных прокладок для перемещения мини-карты в любой угол обзора.

ПРИМЕЧАНИЕ: У макетов есть поля, установленные по умолчанию, поэтому, если вы хотите, чтобы ваши виджеты плотно прилегали к краям, обнулите их.

+0

Поддерживает ли конструктор добавление 'QFormLayout' в' QGraphicsView'? Когда я пытаюсь добавить макет, он добавляется как дочерний элемент «centralWidget» вместо этого, и представления сидят рядом друг с другом, а не сидят друг над другом. – Mitch

+0

Дизайнер, похоже, не поддерживает это, что является неудачным. –

+0

Я вижу. Спасибо, я попробую. – Mitch

Смежные вопросы