Question

J'ai créé une classe qui hérite de la QListWidget et est destiné à être une pile de cartes.

J'ai surchargé les fonctions de glisser-déposer pour permettre une carte à faire glisser à la table (un autre objet de mon programme) et maintenant je bute sur un autre problème.

Les spectacles QListWidget tous mes articles de (principalement parce que je les ajoute à l'interface depuis le début).

Voilà donc comment ça se passe: dans mon mainwindow je Initialiser mon objet CardPile et remplissez-le avec un vecteur Shuffled de cartes.

Maintenant, je veux que mon QListWidget pour montrer qu'un seul (mais son montrant une grille avec toutes mes cartes).

Sur une goutte-je supprimer l'élément de mon QListWidget. Mais je ne sais pas si je devais ajouter et supprimer 1 carte à la fois (il montre seulement 1 carte ofcourse) dans mon code.

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

Ce sont les fonctions de mon 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?
}

Parce que j'ai actuellement mon vecteur de cartes mélangées dans la fenêtre principale (où ajouter toutes les cartes dans un forloop).

Ou devrais-je faire un signal et une fente qui connexion entre mainwindow et CardPile - donc quand

delete takeItem(row(item));

est appelée I émettre un signal qui dit d'ajouter la carte à côté de la liste?

Merci pour commentaires

Était-ce utile?

La solution

Vous pouvez utiliser un QStackWiget (la première ligne du Desription est exactement ce que vous voulez ahieve) au lieu d'un QListWidget.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top