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

时间:2012-09-24 10:09:28

标签: qt qt4.7 qlistview model-view qlineedit

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

2 个答案:

答案 0 :(得分:0)

<强> 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() );

}

答案 1 :(得分:0)

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