如何在 QSqlQueryModel 中获取硬编码 QCheckBoxes 的状态?
Posted
技术标签:
【中文标题】如何在 QSqlQueryModel 中获取硬编码 QCheckBoxes 的状态?【英文标题】:How to get the status of hardcoded QCheckBoxes in QSqlQueryModel? 【发布时间】:2015-12-20 22:55:26 【问题描述】:我有一个QTableView
显示QSqlQueryModel
。该模型包含在第一列的每一行中创建的复选框(其中包含 ref_no;我的数据库中的主键),如下所示:
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()
或lambdas 的映射器的临时解决方案)。例如为映射定义一个成员:
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
或者,如果您喜欢 lambda,您可以通过捕获来完成上述操作:
connect(checkBox, &QCheckBox::toggled,
[i](bool toggled) /* use i, toggled */ );
话虽如此,我强烈建议不要创建 QCheckBoxes
并使用 setIndexWidget
。 相反,请使用 proxy model通过返回 Qt::ItemIsUserCheckable
标志和处理 Qt::CheckStateRole
的读取和写入来丰富您的列。
【讨论】:
以上是关于如何在 QSqlQueryModel 中获取硬编码 QCheckBoxes 的状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有硬编码文件名的情况下以 Angular 4 下载文件?
RStudio 和 SVN:如何提示连接细节以及如何避免硬编码?