2017-11-11 127 views
3

我正在使用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

回答

3

似乎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

1

如果你不想惹按鈕的焦點策略,你也可以強制表視圖關閉其編輯器按鈕的點擊處理程序在訪問數據前強制清除焦點:

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