Как получить индекс элемента эскиза после перетаскивания элемента из эскизов QListWidget? - PullRequest
0 голосов
/ 05 ноября 2018

Я буду использовать событие перетаскивания внутри моего проекта. Итак, теперь мой вопрос, когда я перетаскиваю элемент из QListWidget в то время, я хочу получить индекс миниатюры. Я использую этот код для перетаскивания миниатюр.

void QvtkOpenGLWidgetdrag::dragEnterEvent(QDragEnterEvent *event)
{
    QVTKOpenGLWidget::dragEnterEvent(event);
    event->accept();

}

void QvtkOpenGLWidgetdrag::dropEvent(QDropEvent *event)
{
    const QMimeData *mimeData = event->mimeData();
    int row;
    int col;

    if (mimeData->hasFormat("application/x-qabstractitemmodeldatalist")) {
        QByteArray encoded = mimeData->data("application/x-qabstractitemmodeldatalist");
        QDataStream stream(&encoded, QIODevice::ReadOnly);
        while (!stream.atEnd()) {
            QMap<int, QVariant> roleDataMap;
            stream >> row >> col >> roleDataMap ;
            QIcon icon = roleDataMap.value(1).value<QIcon>();
            m_pixmap = icon.pixmap(icon.availableSizes().first());
            update();
        }
        event->acceptProposedAction();
    }
    else {
        event->ignore();
    }
}

Любая помощь очень полезна для меня. Заранее спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

вы можете вызвать метод currentIndex () в ListWidget, затем проверить, является ли это допустимым, и если да, получить значение строки ... (обратите внимание, что они начинаются с 0)

Пример

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->listWidget->addItem("A");
    ui->listWidget->addItem("B");
    ui->listWidget->addItem("C");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{

    auto index = ui->listWidget->currentIndex();
    if (index.isValid())
    {
       std::cout << "row: " << index.row() << std::endl;
    }
}
...