QTableWidget gezielt durchsuchen

Alles rund um die Programmierung mit Qt
Antworten
The_EcKo
Beiträge: 9
Registriert: 20. November 2009 09:39

QTableWidget gezielt durchsuchen

Beitrag von The_EcKo »

Ich mal wieder :wink:

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;
	}
}
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^^
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Da die Tabelle recht klein sein wird, würde ich die Tabelle in einer Schleife selbst durchlaufen und die Spalten mit data() auslesen und vergleichen...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

oder intern die Daten in einer Map halten und die Map dann in die Tabelle. Die Map kannst du kostengünstiger durchsuchen!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

ja, bei sowas sollt man lieber nen QTableView und nen eigenes QItemModel verwenden. Kann man die daten intern so halten, wie es die funktionalitaet verlangt.

Ciao ...
The_EcKo
Beiträge: 9
Registriert: 20. November 2009 09:39

Beitrag von The_EcKo »

upsala hat geschrieben:Da die Tabelle recht klein sein wird, würde ich die Tabelle in einer Schleife selbst durchlaufen und die Spalten mit data() auslesen und vergleichen...
Hm naja was heisst klein, es sind 24 Tasten mit je 2 Funktionen dann
AuE hat geschrieben:oder intern die Daten in einer Map halten und die Map dann in die Tabelle. Die Map kannst du kostengünstiger durchsuchen!
Danke das werd ich mal probieren =)
RHBaum hat geschrieben:ja, bei sowas sollt man lieber nen QTableView und nen eigenes QItemModel verwenden. Kann man die daten intern so halten, wie es die funktionalitaet verlangt.
Mh joa hab das Ganze ja von einem Vorgänger übernommen und weiß net ob ich jetzt das Ganze Widget austauschen soll, da das meiste ja funktioniert^^
Antworten