Pregunta

He creado una clase que hereda el QListWidget y está destinado a ser una pila de tarjetas.

Me ha sobrecargado las funciones de arrastrar y soltar para permitir una tarjeta para ser arrastrado a la mesa (otro objeto de mi programa) y ahora tropezar con otro problema.

Los espectáculos QListWidget todos mis artículos (principalmente porque los agrego a la interfaz gráfica de usuario desde el principio).

Así que esto es lo que pasa: Yo en mi MainWindow initialise mi CardPile objeto y llenarlo con un vector de cartas barajadas.

Ahora quiero mi QListWidget para mostrar sólo una (pero su mostrando una cuadrícula con todas mis tarjetas).

En una estación de E quitar el elemento de mi QListWidget. Pero no tengo ni idea si tuviera que agregar y quitar 1 tarjeta a la vez (por lo que sólo muestra supuesto 1 tarjeta) en mi código.

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

Estas son las funciones en mi CardPile:. QListWidget

así:

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

Debido a que actualmente tengo mi vector de cartas barajadas en el MainWindow (donde agrego todas las cartas en una forloop).

O debería hacer una señal y la ranura de conexión que entre MainWindow y CardPile - así que cuando

delete takeItem(row(item));

se llama I emitir una señal que dice para agregar la siguiente carta a la lista?

Gracias por la retroalimentación

¿Fue útil?

Solución

Se puede utilizar un QStackWiget (la primera línea de la desription es exactamente lo que quiere ahieve) en lugar de un QListWidget.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top