QTreeWidget
에서 wlan SSID
중복을 제거하거나 중복을 확인하고 싶습니다. QTreeWidget
에 표시하고 싶습니다.SSID 중복 제거 문제
스크린 샷 :
나는 QSet
에 의해 중복을 제거 시도했다, 그러나 그것은 또한 목록에 있어야 SSID
제거, 그래서 내 경우에는 작동하지 않습니다.
샘플 코드 :는
QStringList apList;
for (int i = 0; i < (int)pBssList->dwNumberOfItems; i++) {
pBssEntry = (WLAN_AVAILABLE_NETWORK *)&pBssList->Network[i];
apList << QString::fromUtf8(reinterpret_cast<char *>(pBssEntry->dot11Ssid.ucSSID), pBssEntry->dot11Ssid.uSSIDLength);
}
QSet<QString> apSet = QSet<QString>::fromList(apList);
for (int j = 0; j < apSet.count(); j++) {
pBssEntry = (WLAN_AVAILABLE_NETWORK *)&pBssList->Network[j];
qDebug() << QString::fromUtf8(reinterpret_cast<char *>(pBssEntry->dot11Ssid.ucSSID), pBssEntry->dot11Ssid.uSSIDLength);
}
실제 코드 구조, 벡터 및 벡터 반복 삽입합니다 QTreeWidget
에 QTreeWidgetItems
을 포함, 매우 크고 복잡하다.
나는 그것을 검사했고 마지막 두 SSID
을 중복으로 제거합니다.
Windows
과 같은 동작이 필요합니다. 어떤 아이디어? 감사.
업데이트 :
QMap<QString, int> apMap;
for (int i = 0; i < (int)pBssList->dwNumberOfItems; i++) {
pBssEntry = (WLAN_AVAILABLE_NETWORK *)&pBssList->Network[i];
apMap.insert(QString::fromUtf8(reinterpret_cast<char *>(pBssEntry->dot11Ssid.ucSSID), pBssEntry->dot11Ssid.uSSIDLength), i);
}
qDebug() << apMap.count();
qDebug() << apMap.uniqueKeys();
QMap<QString, int>::iterator it;
for (it = apMap.begin(); it != apMap.end(); it++) {
qDebug() << it.key();
}
는 이제 작동,하지만 나뿐만 아니라 다른 기능을 수정해야합니다. 업데이트
: 2 마지막으로, 나는 버그를 수정하고 QTreeWidget
하지만 때로는 프로필 항목에 대한 모든 데이터를 추가 한이 SSID 열이 다르다. 문제는 프로필이 추가되지 않고 프로필 열에 Windows OS
에 표시된 것과 같이 SSID가 표시된다는 것입니다. 그렇지 않으면 SSID가 비어있게됩니다.
그래서 코드 :
for (int j = 0; j < apHash.uniqueKeys().count(); j++) {
pBssEntry = (WLAN_AVAILABLE_NETWORK *)&pBssList->Network[j];
if (wcslen(pBssEntry->strProfileName) != NULL) {
wirelessAPData.profile = QString::fromWCharArray(pBssEntry->strProfileName);
wirelessAPData.name = apHash.uniqueKeys().value(j);
} else {
if (!apHash.uniqueKeys().value(j).isEmpty()) {
wirelessAPData.profile = apHash.uniqueKeys().value(j);
wirelessAPData.name = apHash.uniqueKeys().value(j);
} else {
wirelessAPData.profile = QObject::tr("Hidden network");
wirelessAPData.name = QObject::tr("Hidden network");
}
}
}
또한 나는이 QMap
QHash
에 빠르고 wirelessAPData
단지 struct
입니다 수 있도록 변경되었습니다. 감사.
업데이트 : 3 나는 그들이 그들 중 일부는 (has profile
, no profile
, connected
) 플래그를 가지고 예를 들어 다른 Flags
,이,이 SSID
년대 중복되지 않기 때문에, 더 나은 해결책이 있어야한다고 생각합니다.
3 - connected
, 2 - has profile
, 0 - no profile
을 그리고 난이 상수 값으로 네트워크를 검사 할 때 난 단지 no profile
또는 has profile
또는 connected
로 예를 들면 얻을 : 나는 또한 값으로 몇 가지 상수를 만들었습니다.하지만 has profile
으로 표시하려면 수표가 필요하고 no profile
으로는 새로운 수표가 필요합니다. 어떤 아이디어? 감사.
업데이트 : 4 : 내가 지원하는 응용 프로그램을 재 설계 한 같은 APs
(프로파일 포함). 문제가 해결되었습니다.
확인. 나는 그것을 시도하고 대답 할 것이다. 감사. – Cobra91151
나는 당신의 제안을 확인했지만, QMap에 삽입 할 때 나의 경우 키가 다르다. 그래서 나는 그것을 비교할 수 없다. 내 주요 게시물의 코드 예제. – Cobra91151
"내 경우 키가 다릅니다"? 하지만 중복 제거에 관한 질문이 아닙니까? 따라서 SSID는 두 번 이상 올 수 있습니다. 또한'QMap'을 사용하면 삽입에주의해야합니다. 같은 키가있는 새 항목을 삽입하면 키가 이미 존재하는지 문서에 명시되어 있으므로 맵에 저장된 항목 만 바뀝니다. 그래서'QMap :: contains'를 사용하는 것은 확실히 insert를 호출하기 전에 사용해야 할 것입니다. – rbaleksandar