Faites QListWidget afficher uniquement 1 article
-
29-09-2019 - |
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
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.