我如何将项目从 QListWidget 拖放到 QPlainTextEdit?
How do i drag item from QListWidget and drop to QPlainTextEdit?
如左图所示,我有一个名为 "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 只接受文本而不接受项目类型。
我该怎么做呢 ?
感谢您完成此过程。
问题很简单:QPlaintTextEdit默认不识别QListWidget发送的mimetype,所以解决方法是重写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();
}
如左图所示,我有一个名为 "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 只接受文本而不接受项目类型。 我该怎么做呢 ? 感谢您完成此过程。
问题很简单:QPlaintTextEdit默认不识别QListWidget发送的mimetype,所以解决方法是重写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();
}