Frage

Ich habe eine Klasse erstellt, dass erbt die QListWidget und sollte ein Stapel von Karten sein.

Ich habe die Drag-and-Drop-Funktionen überladen eine Karte zu ermöglichen, auf den Tisch (ein weiteres Ziel meines Programms) gezogen werden und ich stolpern jetzt auf ein anderes Problem.

Die QListWidget zeigt alle meine Einzelteile (vor allem, weil ich sie auf die GUI von Anfang an hinzufügen).

Das ist also, wie es geht: in meinem Hauptfenster I Initialise meine CardPile Objekt und füllen Sie es mit einem Shuffled Vektor von Karten.

Jetzt mag ich meine QListWidget nur zeigen, (aber es ist ein Gitter mit allen meinen Karten angezeigt).

Auf einem Tropfen entferne ich den Artikel von meinem QListWidget. Aber ich habe keine Ahnung, wenn ich zu einem Zeitpunkt hinzufügen und entfernen 1 Karte (so es zeigt nur 1 Karte ofcourse) in meinem 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

Dies sind die Funktionen in meinem CardPile. QListWidget

so:

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

Da ich zur Zeit meinen Vektor von gemischten Karten im Hauptfenster habe (wo ich alle Karten in einem forloop hinzufügen).

Oder soll ich mache ein Signal und Slot, dass connect zwischen Hauptfenster und CardPile - so, wenn

delete takeItem(row(item));

heißt ich ein Signal aussenden, dass die nächste Karte zu der Liste hinzuzufügen sagt?

Dank für das Feedback

War es hilfreich?

Lösung

Sie können mit einem QStackWiget (die erste Zeile des desription genau was Sie wollen ahieve) anstelle eines QListWidget.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top