Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTableView没有';单击按钮时不更新编辑的单元格_Qt_Qt5_Qtableview_Qpushbutton - Fatal编程技术网

QTableView没有';单击按钮时不更新编辑的单元格

QTableView没有';单击按钮时不更新编辑的单元格,qt,qt5,qtableview,qpushbutton,Qt,Qt5,Qtableview,Qpushbutton,我使用QTableView作为行输入方法: 用户填充字段,然后单击“Carica”按钮执行插入(他不应该填充整行) 假设用户插入(如图中所示)第一个字段,然后单击“carica”。按钮代码被触发: QModelIndex index = modelprod->index(0, 0); //modelprod is model for the QTable qInfo() << index.data().toString(); main window.h nam

我使用QTableView作为行输入方法: 用户填充字段,然后单击“Carica”按钮执行插入(他不应该填充整行)

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

    QModelIndex index = modelprod->index(0, 0); //modelprod is model for the QTable
    qInfo() << index.data().toString();
main window.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”。没有单击其他任何地方,我单击按钮。当目的是复制新行中的第一行内容时,将创建一个新的空行。现在,如果我单击空单元格,然后单击按钮,它会正确地将其写入新单元格。

Mac OSX上的
QPushButton
的默认设置是
TabFocus
。这意味着单击按钮时,表格单元格的编辑器不会失去焦点。因此,尝试将按钮的策略更改为
单击焦点
strong焦点

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

如果不想弄乱按钮的焦点策略,还可以通过强制表视图清除焦点,在访问数据之前,在按钮的单击处理程序中强制表视图关闭其编辑器:

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

modelprod是自定义模型或标准之一,如果是自定义模型,请向我们显示代码。只需添加代码。您可以在按下按钮之前单击另一个单元格,但我注意到,即使是普通的QTableWidget也存在同样的问题。模型在版本结束时更新,它没有在编辑过程中更新以提高效率,所以我想用我之前评论的方法来证实它。非常感谢!!!确切地说,Mac OSX上QPushButton的默认焦点策略是TabFocus。也许更好的选择是点击焦点?@Francescopegoro。谢谢-我已经修改了我的答案。
void MainWindow::on_pushButton_clicked()
{
    // finish any editing
    if (ui->tableView->focusWidget())
        ui->tableView->focusWidget()->clearFocus();
    // ... do something with the data in the table
}