使QListWidget仅显示1项

时间:2010-11-30 22:04:19

标签: c++ qt drag-and-drop qlistwidget

我创建了一个继承QListWidget的类,并且是一堆卡片。

我重载了拖放功能,允许将卡片拖到桌子上(我程序的另一个对象),现在我偶然发现了另一个问题。

QListWidget显示我的所有项目(主要是因为我从一开始就将它们添加到GUI中)。

这是怎么回事: 在我的主窗口中,我初始化了我的CardPile对象并用一个随机的卡片向量填充它。

现在我希望我的QListWidget只显示一个(但是它显示了我所有卡片的网格)。

在一个drop上我从QListWidget中删除了该项。但我不知道我是否要在我的代码中一次添加和删除1张卡片(因此它只显示1张卡片)。

public:
    TileStack(QWidget *parent = 0);
    void addCard(QPixmap pixmap, QPoint location);
    QPixmap showCard();

protected:
    void dragEnterEvent(QDragEnterEvent *event);
    void dragMoveEvent(QDragMoveEvent *event);
    void startDrag(Qt::DropActions supportedActions); //in this function I remove the current item

这些是我的CardPile中的函数:QListWidget。

这样:

void TileStack::startDrag(Qt::DropActions /*supportedActions*/)
{
    QListWidgetItem *item = currentItem();

    QByteArray itemData;
    QDataStream dataStream(&itemData, QIODevice::WriteOnly);
    QPixmap pixmap = qVariantValue<QPixmap>(item->data(Qt::UserRole));
    QPoint location = item->data(Qt::UserRole+1).toPoint();

    dataStream << pixmap << location;

    QMimeData *mimeData = new QMimeData;
    mimeData->setData("card", itemData);

    QDrag *drag = new QDrag(this);
    drag->setMimeData(mimeData);
    drag->setHotSpot(QPoint(pixmap.width()/2, pixmap.height()/2));
    drag->setPixmap(pixmap);

    if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
        delete takeItem(row(item));
    //should I also make the add to the next item here? and how exactly should I put it     here?
}

因为我目前在主窗口中有我的洗牌卡片(我将所有卡片添加到forloop中)。

或者我应该制作一个连接主窗口和CardPile的信号和插槽 - 所以当

delete takeItem(row(item));

被称为我发出一个信号,说要将下一张卡添加到列表中?

感谢您的反馈

1 个答案:

答案 0 :(得分:2)

你可以使用QStackWiget(描述的第一行正是你想要实现的),而不是QListWidget。