سؤال

لقد قمت بإنشاء فصل يرث QListWidget ويهدف إلى أن يكون كومة من البطاقات.

لقد قمت بإفراط في تحميل وظائف السحب والإفلات للسماح بسحب بطاقة إلى الجدول (كائن آخر من برنامجي) والآن تتعثر في مشكلة أخرى.

يعرض QListWidget جميع العناصر الخاصة بي (أساسًا لأنني أضيفها إلى واجهة المستخدم الرسومية من البداية).

إذن هذا هو ما يسير الأمور: في Mainwindow ، أقوم بتهيئة كائن Cardpile الخاص بي وأملأه بمتجه البطاقات.

الآن أريد أن تظهر QListWidget واحدة فقط (ولكنها تظهر شبكة مع جميع بطاقاتي).

في قطرة ، أقوم بإزالة العنصر من QListWidget الخاص بي. لكن ليس لدي أي فكرة عما إذا كنت سأضيف وإزالة بطاقة واحدة في كل مرة (لذلك تظهر فقط بطاقة واحدة من طبعها) في الكود الخاص بي.

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