質問

QlistWidgetを継承し、カードのスタックになることを意図したクラスを作成しました。

ドラッグアンドドロップ機能を過負荷にして、カードをテーブルにドラッグすることができます(プログラムの別のオブジェクト)、今度は別の問題につまずきます。

QListWidgetにはすべてのアイテムが表示されます(主に最初からGUIに追加するため)。

これがどのように進むかです:MainWindowでは、CardPileオブジェクトを初期化し、シャッフルされたカードのベクトルで埋めます。

今、私は私のQListWidgetに1つだけを表示してほしい(ただし、すべてのカードでグリッドを表示します)。

ドロップすると、qlistwidgetからアイテムを削除します。しかし、コードに一度に1枚のカードを追加して削除するかどうか(1枚のカードしか表示されない)かどうかはわかりません。

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

これらは、私の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?
}

私は現在、MainWindowにシャッフルカードのベクトルを持っているからです(すべてのカードをForloopに追加します)。

または、MainWindowとcardpileの間に接続する信号とスロットを作成する必要があります。

delete takeItem(row(item));

次のカードをリストに追加するように言う信号を発すると呼ばれていますか?

フィードバックをありがとう

役に立ちましたか?

解決

使用できます QStackWiget (脱リプションの最初の行は、まさにあなたがしたいものです)qlistwidgetの代わりに。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top