2015-10-15 38 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); 
}