Haga QListWidget sólo muestran 1 artículo
-
29-09-2019 - |
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
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.