我有一个网格布局,可以在下面的图像上显示图像。我希望能够在任何位置交换两张图像。
层次结构如下:
ScrollArea-> GridLayout-> Label [n] - > Pixmap
在代码中动态创建的网格布局中有 n 标签。
可以在我想要的列/行中再次删除创建的所有内容,但我正在尝试找到更优雅的方法来执行此操作。有什么提示吗?
答案 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);
}