Qt - 如何将 QListView 项目转移到另一个 QListView?

Posted

技术标签:

【中文标题】Qt - 如何将 QListView 项目转移到另一个 QListView?【英文标题】:Qt - How to Transfer QListView Items to another QListView? 【发布时间】:2012-09-24 10:09:27 【问题描述】:

我有一个 QLineEdit2 个 QPush 按钮(添加和删除按钮)和一个 QListView。当单击添加按钮时,我在QLineEdit 中输入的文本将在QListView 中添加。如果我从 QListView 中选择任何一个 Item 并单击 Remove Button,则所选项目将被删除。我完成了这些事情,它工作正常。 现在我想添加另一个 QListView,如果我双击 QListView 项目(QListView 1),则项目应该被转移(QListView 1 中的项目应该被完全删除)到新的 QListView (QListView 2),反之亦然。请帮助我提出您的建议。提前致谢。

【问题讨论】:

【参考方案1】:

Example.h

class Example : public QWidget

    Q_OBJECT

public:
    explicit Example(QWidget *parent = 0);
    ~Example();

private slots:
     void on_listView_doubleClicked(const QModelIndex &index);
     void on_listView_2_doubleClicked(const QModelIndex &index);

private:
    QStandardItemModel *model;  // This model is used when the add button is clicked.
    QStandardItemModel *listViewModel;
;  

Example.cpp

void Example::on_listView_doubleClicked(const QModelIndex &index)
  
    QStandardItem *Item1;
    Items1 = new QStandardItem();

    Items1->setData(ui->listView->currentIndex().data(), Qt::DisplayRole );
    Items1->setEditable( false );

    listViewModel->appendRow( Items1 );
    listViewModel->sort( 0, Qt::AscendingOrder );
    ui->listView_2->setModel( listViewModel );

    model->removeRow( ui->listView->currentIndex().row() );


void Example::on_listView_2_doubleClicked(const QModelIndex &index)

    QStandardItem *Items2;
    Items2 = new QStandardItem();
    Items2->setData( ui->listView_2->currentIndex().data(), Qt::DisplayRole );
    Items2->setEditable( false);

    model->appendRow( Items2 );
    model->sort( 0,Qt::AscendingOrder );

    ui->listView->setModel( model );
    model->removeRow( ui->listView_2->currentIndex().row() );


【讨论】:

你为什么还要费心使用QListView,而那时还在使用一种古老的方式来插入项目?只需改用QListWidget【参考方案2】:

更可扩展的方法是创建自定义模型(如果适合您的需要,可能继承 QStringListModel),然后实施 moveRows 和/或拖放工具。

【讨论】:

以上是关于Qt - 如何将 QListView 项目转移到另一个 QListView?的主要内容,如果未能解决你的问题,请参考以下文章

Qt:自定义 QListView 和实时控件

如何在 Qt5 中将表单类从 UI 转移到另一个文件夹

Qt:更改 QListView 中的图标

如何将 QModelIndex 设置为 QListView

Qt入门系列开发教程高级控件篇QListview列表视图

Qt拖放QListView删除它被释放的项目