Как переместить QListWidgetItem? - PullRequest
0 голосов
/ 26 мая 2020

Как переместить QListWidgetItem и не пропустить виджет предметов?

Это работает при перетаскивании, но не может выполнять ту же работу с кнопкой.

1 Ответ

1 голос
/ 27 мая 2020
removeItemWidget( item(row) );
QCoreApplication::removePostedEvents (p_widget,QEvent::DeferredDelete );

Я удаляю виджет, показанный в Item, и делаю патч таким образом, чтобы удалить сигнал удаления из очереди. таким образом я могу переместить виджет на другой элемент

int DropList::moveWidget(int row, int pos)
{
    const int new_row  = row+pos;
    if(count()>1 && row>=0 && row <count() && new_row>=0 && new_row<count())
    {
        // A->B
        DropListItem *pA = widgetByRow(row);
        DropListItem *pB = widgetByRow(new_row);
        if(pB->isMovable() && pA->isMovable())
        {

            removeItemWidget(item(new_row));
            removeItemWidget(item(row));
            QCoreApplication::removePostedEvents (pB,QEvent::DeferredDelete );
            QCoreApplication::removePostedEvents (pA,QEvent::DeferredDelete );
            setItemWidget(item(new_row),pA);
            setItemWidget(item(row),pB);
        }
        emit changed();
        return new_row;
    }
    return 0;
}

параметры - это строка - это элемент строка и pos +1, +2, -1, ....

...