c++ - 如何将项目从QListWidget拖放到QPlainTextEdit?

标签 c++ qt qt5 qt-creator qtcore

Qt

如左侧图像中所示,我有一个名为“my_listwidget”的QListWidget,其中填充了3个命令,而右侧则有一个名为“my_textedit”的QPlainTextEdit。

我可以通过使用此代码从QListWidget拖动

ui->block_commands_listwidget->setSelectionMode(QAbstractItemView::SingleSelection);
ui->block_commands_listwidget->setDragEnabled(true);
ui->block_commands_listwidget ->setDragDropMode(QAbstractItemView::DragDrop);
ui->block_commands_listwidget->viewport()->setAcceptDrops(false);
ui->block_commands_listwidget->setDropIndicatorShown(true);

但是我无法放入QPlainTextEdit,因为我拖动它时,它是“item type”,而当我尝试放入文本框时,QPlainTextEdit只接受Text,而不接受item类型。
我该怎么做呢 ?
感谢您完成此操作。

最佳答案

问题很简单:QPlaintTextEdit无法识别QListWidget默认发送的模仿类型,因此解决方案是重写 mimeData() 方法,将所选项目的文本添加为​​纯文本:

#include <QtWidgets>

class ListWidget: public QListWidget{
public:
    using QListWidget::QListWidget;
protected:
    QMimeData *mimeData(const QList<QListWidgetItem *> items) const
    {
        QMimeData *md = QListWidget::mimeData(items);
        QStringList texts;
        for(QListWidgetItem *item : selectedItems())
            texts << item->text();
        md->setText(texts.join(QStringLiteral("\n")));
        return md;
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    ListWidget *lw = new ListWidget;
    lw->addItems({"First Command", "Second Command", "Third Command"});
    lw->setSelectionMode(QAbstractItemView::SingleSelection);
    lw->setDragEnabled(true);
    lw->setDragDropMode(QAbstractItemView::DragOnly);
    QPlainTextEdit *pe = new QPlainTextEdit;
    QHBoxLayout *lay = new QHBoxLayout(&w);
    lay->addWidget(lw);
    lay->addWidget(pe);
    w.show();
    return a.exec();
}

关于c++ - 如何将项目从QListWidget拖放到QPlainTextEdit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62126626/

相关文章:

python - 通过串行方式将 float 作为字节从 Python 程序发送到 Arduino

c++ - 为什么下面的代码用 `c++03` 编译而不用 `c++11`

c++ - 针对 Qt 5.10.1 编译 QtWebKit 5.212 的私有(private) header 问题

c++ - 如何在 Qt C++ 应用程序中显示带有大量小部件的可滚动列表作为项目?

c++ - native GUI 的解决方案是什么?

c++ - Qt C++ 中基于 ID 的翻译

c++ - QAbstractItemModel for QMetaObject,必须自己写吗?

c++ - 是否可以用两种不同的语言标准编译一个项目?

Qt 无法加载临时状态消息

c++ - QT5 C++ 信号到 QML 槽不工作