QTableWidget gezielt durchsuchen
Verfasst: 24. November 2009 10:37
Ich mal wieder
Dieses mal geht es darum, dass ich ein QTableWidget habe in das ich über einen QDialog Items eintrage.
Die Sache ist die, es gibt Keys und zu jedem Key 2 Modes.
Key pressed und Key released.
Wenn ich also einen Key eintrage hab ich im QTableWidget steht
Name Mode
F1 Pressed
usw.
Dazwischen habe ich jetzt ein Abfrage die verhindern soll, dass ein Key mit demselben Mode kommt. Es soll also nciht möglich sein 2 mal F1 Pressed da stehen zu haben.
Hier mal der Quellcode der Funktion
Wie man sieht sucht die Abfrage mit findItems in keyTable(QTableWidget) nach Namen und Mode des gerade erstellten Keys und gibt gegebenfalls eien Meldung aus.
Problem ist jetzt nur ich habe
F1 Pressed, F1 Released, F2 Pressed in der LIste und möchte nun F2 Released hinzufügen, dann kann ich das nciht mehr weil er im QTableWidget ja irgendwo F2 und irgendwo anders Released gefunden hat.
Ich möchte aber das er immer nur von einer Zeile die beiden Spalten überprüft. Geht das irgendwie bzw. war meine Frage verständlich^^
Dieses mal geht es darum, dass ich ein QTableWidget habe in das ich über einen QDialog Items eintrage.
Die Sache ist die, es gibt Keys und zu jedem Key 2 Modes.
Key pressed und Key released.
Wenn ich also einen Key eintrage hab ich im QTableWidget steht
Name Mode
F1 Pressed
usw.
Dazwischen habe ich jetzt ein Abfrage die verhindern soll, dass ein Key mit demselben Mode kommt. Es soll also nciht möglich sein 2 mal F1 Pressed da stehen zu haben.
Hier mal der Quellcode der Funktion
Code: Alles auswählen
void KeyCreate::createNewItemKey(const QString& name)
{
qDebug() << "Programmstatus: In KeyCreate::CreateNewItemKey";
QString tmpName;
QString tmpMode;
if(name.size()==0)
{
emit setModified(1);
tmpName = newDialog->getName();
tmpMode = newDialog->getMode();
}
else
tmpName = name;
if(keyCount >= MAXKEYS) //too many keys
{
QMessageBox::critical(this, tr("Error"), tr("Maximum number of keys reaches."));
return;
}
if((keyTable->findItems(tmpName, Qt::MatchExactly)).size()!=0 && keyTable->findItems(tmpMode, Qt::MatchExactly).size()!=0)
{
qDebug() << "createNewKeyItem:: found 2 exact modes";
QMessageBox::critical(this, tr("Error"), tr("Mode already exists for this key, please choose another mode."));
newDialog->show();
return;
}
if((keyTable->findItems(tmpName, Qt::MatchExactly)).size()!=0 && keyTable->findItems(tmpName, Qt::MatchExactly).size()!=0)
{
qDebug() << "createNewKeyItem:: found 2 exact names";
newDialog->deleteFromNameList(tmpName);
editDialog->deleteFromNameList(tmpName);
}
tableItems[0][keyCount] = new QTableWidgetItem(tmpName);
tableItems[1][keyCount] = new QTableWidgetItem(tmpMode);
QString keyName = tableItems[0][keyCount]->text();
QString keyMode = tableItems[1][keyCount]->text();
qDebug() << keyName; qDebug() << keyMode;
if(keyTable->rowCount()==0) //keyTable is empty
{
keyTable->insertRow(0);
for(uint8_t i=0; i<KEYCOLUMNS; i++)
keyTable->setItem(0, i, tableItems[i][keyCount]);
newDialog->clearAll();
emit keyCreated(tmpName);
keyCount++;
return;
}
else //keyTable is not empty
{
keyTable->insertRow(keyTable->rowCount());
for(uint8_t i=0; i<KEYCOLUMNS; i++)
keyTable->setItem(keyTable->rowCount()-1, i, tableItems[i][keyCount]);
newDialog->clearAll();
emit keyCreated(tmpName);
keyCount++;
return;
}
}
Problem ist jetzt nur ich habe
F1 Pressed, F1 Released, F2 Pressed in der LIste und möchte nun F2 Released hinzufügen, dann kann ich das nciht mehr weil er im QTableWidget ja irgendwo F2 und irgendwo anders Released gefunden hat.
Ich möchte aber das er immer nur von einer Zeile die beiden Spalten überprüft. Geht das irgendwie bzw. war meine Frage verständlich^^