动态更改网格布局项的位置

时间:2015-10-15 05:04:39

标签: qt qt-creator

我有一个网格布局,可以在下面的图像上显示图像。我希望能够在任何位置交换两张图像。

Grid of images

层次结构如下:

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

在代码中动态创建的网格布局中有 n 标签。

可以在我想要的列/行中再次删除创建的所有内容,但我正在尝试找到更优雅的方法来执行此操作。有什么提示吗?

1 个答案:

答案 0 :(得分:2)

如果您只想使用网格布局......

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);
}