首页 > 解决方案 > 如何移动 QListWidgetItem?

问题描述

如何移动QListWidgetItem而不错过 Item 小部件?

这在拖放时有效,但不能在按钮上执行相同的工作。

标签: c++qtqlistwidget

解决方案


removeItemWidget( item(row) );
QCoreApplication::removePostedEvents (p_widget,QEvent::DeferredDelete );

我删除了 Item 中显示的小部件,并以从队列中删除删除信号的方式制作补丁。这样我可以将 Widget 移动到另一个项目

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

参数是 row - 是项目pos +1, +2 ,-1 ,....


推荐阅读