2015-12-20 24 views
0

我有一個QTableView顯示QSqlQueryModel。該模型包含了在第一列的每一行中創建複選框(它包含ref_no;在我的數據庫主鍵)如下:如何獲取QSqlQueryModel中硬編碼QCheckBoxes的狀態?

void MainWindow::showM(model){ 
    ui->tableView->setModel(model); 
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); 
    for(int i = 0; p<model->rowCount(); i++) 
    { 
     QCheckBox *checkBox = new QCheckBox(); 
     ui->tableView->setIndexWidget(model->index(i,0),checkBox); 
    } 
    ui->tableView->show(); 
} 

...,它的做工精細,顯示所有信息我需要加上覆選框。

現在,我需要得到相鄰複選框被選中的ref_no。

如何做到這一點?

回答

1

使用QSignalMapper(或使用sender()或lambda表達式的涉及映射器的臨時解決方案)。在你的代碼掛鉤

QHash<QCheckBox *, int> m_mapping; 

然後,它像這樣:比如定義一個成員的映射

QCheckBox *checkBox = new QCheckBox(); 
ui->tableView->setIndexWidget(model->index(i,0),checkBox); 
m_mapping[checkBox] = i; 
connect(checkBox, &QCheckBox::toggled, this, &MainWindow::onCheckBoxToggled); 

然後定義這樣的插槽:

// for the love of kittens use proper names for methods 
void MyWindow::onCheckBoxToggled(bool toggled) { 
    QCheckBox *box = static_cast<QCheckBox *>(sender()); 
    const int id = m_mapping.value(box); 
    // do something 
} 

或者,如果你喜歡lambdas,你可以用上面的圖片捕捉:

connect(checkBox, &QCheckBox::toggled, 
     [i](bool toggled){ /* use i, toggled */ }); 

的所有已經被說,我會強烈建議對創建QCheckBoxes,並使用setIndexWidget的想法。而是使用proxy model,通過返回Qt::ItemIsUserCheckable標誌來豐富您的列,並處理Qt::CheckStateRole的讀寫操作。

相關問題