作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个显示QSqlQueryModel
的QTableView
。该模型包含在第一列的每一行中创建的复选框(其中包含 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。
怎么做?
最佳答案
使用 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
}
或者,如果您喜欢 lambda,可以通过捕获来执行上述操作:
connect(checkBox, &QCheckBox::toggled,
[i](bool toggled){ /* use i, toggled */ });
综上所述,我强烈反对创建 QCheckBoxes
和使用 setIndexWidget
的想法。 相反,雇用一个 proxy model通过返回 Qt::ItemIsUserCheckable
标志和处理 Qt::CheckStateRole
的读写来丰富您的专栏。
关于c++ - 如何在 QSqlQueryModel 中获取硬编码 QCheckBoxes 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386797/
我是一名优秀的程序员,十分优秀!