【问题标题】:Moving complete rows in a QTableView在 QTableView 中移动完整的行
【发布时间】:2013-07-02 06:00:59
【问题描述】:

我有一个标签,其中包含 QtableView 和几个按钮,例如“上移”和“下移”。所以在“向上移动”按钮按下时,我必须将QTableView 的整行向上移动一步,并将相邻的移动向下移动一步。我想在不再次创建完整模型的情况下实现这一点,因为再次构建整个模型可能需要时间。相反,我只想在视图中向上移动选定的行。 请告诉我实现这一目标的最简单方法。

提前致谢

【问题讨论】:

  • 你用的是什么模型类?
  • 我正在使用 QStandardItemModel
  • 那你就不需要再构造所有的数据了。您只需要交换 2 行。为什么你不能这样做?你试过什么?
  • 没有直接交换到行的方法。我在想两种方法,一种是设置排序角色和排序,另一种是使用 SetItem 和 TakeRow 方法(但我不确定是否他们会工作)
  • 您可以使用takeItem() 从两行中获取所有项目并将它们存储在临时变量中。之后,您可以使用setItem() 在新位置插入项目。这可以接受吗?

标签: qt qtableview


【解决方案1】:

您不需要任何模型知识就可以做到这一点,而且大多数评论者都完全误会了模型的任何提及。

您只需要获取视图的verticalHeader,然后将您想要的项目与它上面的项目进行部分交换。您可能需要告诉verticalHeader 以允许重新排序setMovable(true)

QT 和 ModelView 编程的主要内容之一是理解和欣赏操纵模型与操纵模型视图的分离。

【讨论】:

    【解决方案2】:

    我做了上下移动功能,这就是我的.cpp 包含的内容

    Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
    {
    ui->setupUi(this);
    
    model = new QStandardItemModel(4,2,this);
    for(int row = 0; row < 4; row++)
        {
            for(int col = 0; col < 2; col++)
            {
                QModelIndex index
                        = model->index(row,col,QModelIndex());
                // 0 for all data
                model->setData(index,row);
            }
        }
    ui->tableView->setModel(model);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::on_upPushButton_clicked()
    {
        if(ui->tableView->currentIndex().row()<=0)
        {
            return;
        }
        QList<QStandardItem *> list = model->takeRow(ui->tableView->currentIndex().row());
        model->insertRow(ui->tableView->currentIndex().row(),list);
    }
    
    void Widget::on_downPushButton_clicked()
    {
    
    int selectedRow = ui->tableView->currentIndex().row() ;
    if(selectedRow == ui->tableView->model()->rowCount()-1)
    {
       return;
    }
    QList<QStandardItem *> list = model->takeRow(ui->tableView->currentIndex().row());
    model->insertRow(selectedRow+1,list);
    }
    

    This is what the ui looks like

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2021-08-27
      • 2020-10-12
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多