QListWidgetを継承するクラスを作成しました。これはカードのスタックを意味します。QListWidgetが1のアイテムのみを表示するようにする
私はカードをテーブル(プログラムの別のオブジェクト)にドラッグできるようにドラッグアンドドロップ機能をオーバーロードしましたが、今は別の問題がつきまといます。
QListWidgetはすべてのアイテムを表示します(主に最初からGUIに追加するためです)。
私のメインウィンドウで 私の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?
}
私は現在、(私はforloopのすべてのカードを追加)メインウィンドウにシャッフルカードの私のベクトルを持っているので。
または私はメインウィンドウとCardPile間を接続する信号とスロットをしなければならないが - そう
delete takeItem(row(item));
が呼び出されたときに、私は、リストに次のカードを追加すると言う信号を発しますか?フィードバック
はい、私はそれについて考えました。このウィジェット内では、QListWidgetItemを使用してlistWidgetを埋めています。私もQStackedWidgetをそれらで埋めることはできますか? – TheDudeAbides
ウィジェットのリストにアクセスすることはできませんが、すべてのウィジェットにインデックスでアクセスすることができます –