2015-10-15 67 views
1

我有一个网格布局,显示图像像下面的图像。我希望能够在任何位置交换两个图像。动态更改网格布局项目的位置

Grid of images

层次结构是这样的:

ScrollArea-> GridLayout->标签[N] - >像素图

Ñ标签在网格布局的动态创建的码。

可以删除我想要的列/行中再次创建的所有内容,但我试图找到更优雅的方式来执行此操作。有小费吗?

+0

我会做一个表视图,而不是处理一个网格布局。 – vahancho

+0

不确定它会帮助我。位置,列和行会有一些变化。有没有办法自动重新排列我删除列的项目? –

+0

我可以说的是,如果谈论动态更改内容,表格视图比布局更灵活。 Qt布局主要用于静态GUI元素。 – 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); 
}