Domanda

Ho creato una classe che eredita il QListWidget ed è pensato per essere una pila di carte.

ho sovraccaricato le funzioni di drag and drop per consentire una carta per essere trascinato al tavolo (un altro oggetto del mio programma) e ora mi inciampare su un altro problema.

Gli spettacoli QListWidget tutti i miei oggetti (soprattutto perché li aggiungo alla GUI fin dall'inizio).

Quindi questo è come va: nel mio MainWindow ho inizializzazione mia CardPile oggetto e riempire con un già mescolato vettore di carte.

Ora voglio la mia QListWidget per mostrare solo uno (ma la sua mostra una griglia con tutte le mie carte).

In una goccia ho rimuovere la voce dal mio QListWidget. Ma non ho idea se dovessi aggiungere e rimuovere 1 carta alla volta (in modo che mostra solo 1 carta naturalmente) nel mio codice.

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

Queste sono le funzioni della mia CardPile:. QListWidget

così:

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?
}

A causa Al momento ho il mio vettore di carte mescolate in MainWindow (dove aggiungo tutte le carte in un forloop).

O dovrei fare un segnale e slot che il collegamento tra MainWindow e CardPile - così quando

delete takeItem(row(item));

si chiama I emettere un segnale che dice di aggiungere la scheda accanto all'elenco?

Grazie per il feedback

È stato utile?

Soluzione

È possibile utilizzare un QStackWiget (è esattamente la prima riga del desription ciò che si vuole ahieve) invece di un QListWidget.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top