2015-10-15 2 views
1

У меня есть сетка, которая отображает изображения, как на изображении ниже. Я хочу иметь возможность обменивать два изображения в любой позиции.Динамическое изменение положения элементов макета сетки

Grid of images

Иерархия такова:

ScrollArea-> GridLayout-> Label [п] -> Pixmap

Есть п метки в макете сетки создаются динамически в код.

Можно удалить все, что нужно создать снова в колонке/строке, которую я хочу, но я пытаюсь найти более элегантный способ сделать это. Какие-нибудь советы?

+0

Я хотел бы сделать это с точки зрения таблицы вместо обработки макета сетки. – vahancho

+0

Не уверен, что стол поможет мне. Там будут некоторые изменения в позиции, столбцах и строках. Есть ли способ автоматического переупорядочения элементов, которые я удаляю колонку? –

+0

Я могу сказать, что представления таблиц намного гибкие, чем макет, если говорить о динамически меняющемся контенте. Qt-макеты в основном предназначены для статических элементов графического интерфейса. – vahancho

ответ

1

Если вы просто хотите использовать макет сетки ...

void YourClass::swapWidgets(QWidget *widgetA, QWidget *widgetB) 
{ 
    int indexA = yourGridLayout->indexOf(widgetA); 
    int indexB = yourGridLayout->indexOf(widgetB); 
    int row1, column1, rowSpan1, columnSpan1; 
    int row2, column2, rowSpan2, columnSpan2; 

    yourGridLayout->getItemPosition(indexA, &row1, &column1, &rowSpan1, &columnSpan1); 
    yourGridLayout->getItemPosition(indexB, &row2, &column2, &rowSpan2, &columnSpan2); 

    yourGridLayout->takeAt(indexA); 
    yourGridLayout->takeAt(indexB); 

    yourGridLayout->addWidget(widgetB, row1, column1, rowSpan1, columnSpan1); 
    yourGridLayout->addWidget(widgetA, row2, column2, rowSpan2, columnSpan2); 
} 
Смежные вопросы