1

我有 3 个QLineEdit(比如姓名、地址和电话号码)、2 个QPushButton(添加和修改)和一个QTableView.

当我在所有QLineEdits 中输入文本时,如果单击 Add 按钮,则QLineEdits 的所有 3 个文本都应添加到QTableView.
同样,如果我在 中输入 3 个文本QLineEdit并单击添加按钮,则文本应放置在QTableView. 像这样应该继续下去。我做了这一切,它工作正常。

现在,如果我从中选择任何行,QTableView并且一旦单击修改按钮,则必须从 中删除所选行,QTableView并且项目应再次放置在它们各自QLineEdit的 s 中。

我怎样才能做到这一点 ?

例子.h

#ifndef EXAMPLE_H
#define EXAMPLE_H

#include <QWidget>
#include <QStandardItemModel>

namespace Ui {
class Example;
}

class Example : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_addButton_released();
    void on_modifyButton_released();

private:
    Ui::Example*ui;
    QStandardItemModel *model;
};

#endif // EXAMPLE_H

示例.CPP

#include "Example.h"

Example::Example(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Example)
{
    ui->setupUi(this);
    model = new QStandardItemModel();

    ui->tableView->setModel(model);

}

Example::~Example()
{
    delete ui;
}

void Example::on_addButton_released()
{
    model->setHorizontalHeaderItem(0, new QStandardItem(QString(" NAME ")));
    model->setHorizontalHeaderItem(1, new QStandardItem(QString(" ADDRESS ")));
    model->setHorizontalHeaderItem(2, new QStandardItem(QString(" PHONE NO ")));

    QStandardItem *nameItem = new QStandardItem(ui->nameLineEdit->text());
    QStandardItem *addressItem = new QStandardItem(ui->addressLineEdit->text());
    QStandardItem *phoneItem = new QStandardItem(ui->phoneLineEdit->text());

    QList<QStandardItem*> row;
    row << nameItem << addressItem << phoneItem;

    model->appendRow(row);

    ui->nameLineEdit->clear();
    ui->addressLineEdit->clear();
    ui->mobileLineEdit->clear();
    ui->emailLineEdit->clear();
}

void Example::on_modifyButton_released()
{


}
4

1 回答 1

1

您要做的是在单击“修改”按钮时,QItemSelectionModelQTableView. 一旦你有了选择,如果有的话,处理它。

例如:

void Example::on_modifyButton_released()
{
    if( ui->myTableView )
    {
         QModelIndex currentIndex = ui->myTableView->selectionModel();

         // Make sure to check the index is valid, as the user
         // may not have selected a row.
         if( currentRow.isValid() )
         {
              // Add your code here to copy the data to 
              // your QLineEdit and remove the row from your
              // QStandardModel.
              ...                  
         }
    }
}

以供参考:

QTableView http://qt-project.org/doc/qt-4.8/QTableView.html

QItemSelectionModel http://qt-project.org/doc/qt-4.8/QItemSelectionModel.html

于 2012-09-26T12:42:48.430 回答