当点击按钮时,QTableView不会更新已编辑的单元格

问题描述:

我正在使用QTableView作为行输入法: 用户填写字段,然后单击“Carica”按钮以执行插入操作(他不应该完全填充整行)。当点击按钮时,QTableView不会更新已编辑的单元格

假设用户插入(如在图像中)第一个字段,然后单击“carica”。按钮代码被触发:

QModelIndex index = modelprod->index(0, 0); //modelprod is model for the QTable 
    qInfo() << index.data().toString(); 

程序不打印任何东西!这是因为tableview没有存储该值(请注意单元格是如何被蓝色包围的)。事实上,如果用户点击按钮之前的其他内容,该程序按预期工作。 enter image description here

我需要一种在用户点击按钮后立即更新模型的方法。

REQUESTED代码示例

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; 
}; 

enter image description here

在图像中,我插入单元格“测试”。没有点击其他任何地方,我点击按钮。当意向是复制新行中的第一行内容时,会创建一个新的空行。现在,如果我点击空单元格然后点击按钮,它会正确地将它写入新单元格中。

+0

modelprod是自定义模型或其中一个标准,如果它是自定义模型之一,请向我们展示代码。 – eyllanesc

+0

只需添加代码。 –

+0

按下 – eyllanesc

似乎Mac OSX上的QPushButton的默认focus-policyTabFocus。这意味着当单击该按钮时,表格单元的编辑器不会失去焦点。因此,尝试改变按钮的政策ClickFocusStrongFocus

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); 
    ui->pushButton->setFocusPolicy(Qt::ClickFocus); 
} 
+0

非常感谢!确切地说,Mac OSX上的QPushButton的默认焦点策略是TabFocus。也许稍微好一点的选择是ClickFocus? –

+1

@FrancescoPegoraro。谢谢 - 我已经修改了我的答案。 – ekhumoro

如果你不想惹按钮的焦点策略,你也可以强制表视图关闭其编辑器按钮的点击处理程序在访问数据前强制清除焦点:

void MainWindow::on_pushButton_clicked() 
{ 
    // finish any editing 
    if (ui->tableView->focusWidget()) 
     ui->tableView->focusWidget()->clearFocus(); 
    // ... do something with the data in the table 
}