我将使用QTableView作为行输入方法:
用户填写字段,然后单击“Carica”按钮执行插入(不需要填写整个行)。
假设用户像图中一样插入第一个字段,然后单击“carica”。按钮代码会被触发:
程序没有输出任何内容!这是因为tableview没有存储该值(请注意,单元格周围是蓝色的)。如果用户在点击按钮之前点击其他东西,则程序按预期工作。
我需要一种方法,在用户点击按钮后立即更新模型。
代码示例请求:
假设用户像图中一样插入第一个字段,然后单击“carica”。按钮代码会被触发:
QModelIndex index = modelprod->index(0, 0); //modelprod is model for the QTable
qInfo() << index.data().toString();
程序没有输出任何内容!这是因为tableview没有存储该值(请注意,单元格周围是蓝色的)。如果用户在点击按钮之前点击其他东西,则程序按预期工作。
![enter image description here](https://istack.dev59.com/2T5LT.webp)
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow){
ui->setupUi(this);
modelp = new QStandardItemModel(1,1,this);
modelp->setHorizontalHeaderItem(0, new QStandardItem(QString("ID")));
ui->tableView->setModel(modelp);
}
MainWindow::~MainWindow(){delete ui;}
void MainWindow::on_pushButton_clicked(){
int rowcount = modelp->rowCount(QModelIndex());
QModelIndex index = modelp->index(0, 0);
modelp->setItem(rowcount,0, new QStandardItem(QString(index.data().toString())));
//add the element in row 0 into a new row in the same tableView
}
mainwindow.h
namespace Ui{class MainWindow;}
class MainWindow : public QMainWindow{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QStandardItemModel *modelp;
};
在图像中,我将其插入到单元格"test"中。 在不单击任何其他位置的情况下,我单击按钮。 当意图是将第一行内容复制到新行时,会创建一个新的空行。 现在,如果我单击空单元格,然后再单击按钮,它会正确地写入一个新单元格。