Вопрос

Я создал класс, который наследует Qlistwidget и предназначен для того, чтобы быть стопкой карт.

Я перегрузил функции перетаскивания, чтобы позволить карте перетаскиваться в таблицу (другой объект моей программы), и теперь я наткнулся на другую проблему.

Qlistwidget показывает все мои элементы (в основном потому, что я добавляю их в графический интерфейс с самого начала).

Так вот как это происходит: в моем Mainwindow я инициализирую свой карт -картинок и заполняю его перетасованным вектором карт.

Теперь я хочу, чтобы мой 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

Это функции в моем картоне: 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?
}

Потому что в настоящее время у меня есть свой вектор перетасованных карт в Mainwindow (где я добавляю все карты в Forloop).

Или я должен сделать сигнал и слот, соединяемый между MainWindow и CardPile, поэтому, когда

delete takeItem(row(item));

называется я излучаю сигнал, который говорит, чтобы добавить следующую карту в список?

Спасибо за отзыв

Это было полезно?

Решение

Вы можете использовать QStackWiget (Первая строка Desription - это именно то, что вы хотите, чтобы его выпить) вместо Qlistwidget.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top