【问题标题】:Make QListWidget only show 1 item使 QListWidget 仅显示 1 项
【发布时间】:2010-11-30 22:04:18
【问题描述】:

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

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

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

所以事情是这样的: 在我的主窗口中,我初始化了我的 CardPile 对象并用打乱的卡片向量填充它。

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

我从我的 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));

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

感谢反馈

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,我已经考虑过了。但在这个小部件内部,我使用 QListWidgetItem 来填充 listWidget 。我也可以用这些填充 QStackedWidget 吗?
    • 您无法访问小部件列表,但您可以通过索引访问所有小部件,所以我猜是的
    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 2016-12-13
    • 2018-01-13
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多