gpt4 book ai didi

c++ - 如何在 QSqlQueryModel 中获取硬编码 QCheckBoxes 的状态?

转载 作者:行者123 更新时间:2023-11-28 05:54:55 25 4
gpt4 key购买 nike

我有一个显示QSqlQueryModelQTableView。该模型包含在第一列的每一行中创建的复选框(其中包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com