从你的代码来看,你使用了 QTreeView
和 QStandardItemModel
来获取选中的项的文本内容。你提到这段代码不能正确获取下拉列表当前选中的内容,这里有几个可能的问题和建议:
确保当前索引有效:在获取
currentIndex
之前,确保它是有效的,并且确实指向一个被选中的项。例如:QModelIndex currentIndex = ui->treeView->currentIndex(); if (!currentIndex.isValid()) { qDebug() << "No valid selection!"; return; }
检查模型是否正确:确认你的
treeView
的模型确实是一个QStandardItemModel
。如果不是,则需要先进行类型转换。QStandardItemModel* model = qobject_cast<QStandardItemModel*>(ui->treeView->model()); if (!model) { qDebug() << "The model is not a QStandardItemModel!"; return; }
使用正确的索引访问项:在获取文本时,确保使用的是有效的索引。如果用的是
itemFromIndex(currentIndex)
,请确认currentIndex
指向的是一个有效的项。调试输出:可以在获取
itemText
后添加调试输出,以查看实际获得了什么值。QString itemText = model->itemFromIndex(currentIndex)->text(); qDebug() << "Selected Item Text:" << itemText;
检查数据填充逻辑:最后,确保你在填充哈希表和设置标签时所依赖的数据结构(如
st_Studbanswer
和其成员)是按照预期工作且包含正确的信息。
这里是改进后的示例代码片段,你可以根据以上建议来调整你的实现:
QModelIndex currentIndex = ui->treeView->currentIndex();
if (!currentIndex.isValid()) {
qDebug() << "No valid selection!";
return;
}
QStandardItemModel* model = qobject_cast<QStandardItemModel*>(ui->treeView->model());
if (!model) {
qDebug() << "The model is not a QStandardItemModel!";
return;
}
// 获取当前选项的文本内容
QString itemText = model->itemFromIndex(currentIndex)->text();
qDebug() << "Selected Item Text:" << itemText;
QHash<int, st_Studbanswer*>& hash = ConnectClientInfo::GetSocketHash();
for (auto it = hash.constBegin(); it != hash.constEnd(); ++it) {
st_Studbanswer* banswerData = it.value();
if (banswerData && banswerData->strIp == itemText) {
ui->label_3->setText(QString::number(banswerData->strecvData.currScore)); // 当前得分
ui->label_5->setText(QString::number(banswerData->strecvData.m_daccuracy * 100, 'f', 2) + "%"); // 当前得分
}
}
希望这些建议能帮助你解决问题!
内容由零声教学AI助手提供,问题来源于学员提问