QTableWidget + ComboBox, über Button ansprechen

Alles rund um die Programmierung mit Qt
Antworten
ClassicSubzero
Beiträge: 21
Registriert: 26. September 2006 13:38

QTableWidget + ComboBox, über Button ansprechen

Beitrag von ClassicSubzero »

Hallo.
Folgendes Problemchen:

In einem QTableWidget füge ich in eine bestimmte Spalte readable Dokumente ein. Für jede Zeile ist die Anzahl der Files variabel.
Wenn nur ein File zum Lesen da war, dann befindet sich in der besagten Spalte und einer bestimmten Reihe nur ein Element (QTableWidgetItem).
Wenn mehrere -> adde ich an der Stelle eine QComboBox in die Zelle und bringe in dieser die Files unter. Der Code dazu:

Code: Alles auswählen

		

QComboBox *box = new QComboBox(0);
QAbstractItemModel *model=box->model();
Programmliste->setCellWidget (row, 1, box);
model->insertRow(0);
model->setData(model->index(0, 0), QIcon (path), Qt::DecorationRole);
model->setData(model->index(0, 0), value);
model->setData(model->index(0, 0), value, Qt::ToolTipRole);

Nun möchte ich die Elemente in den ComboBoxen über einen Button ansprechen.
Das heisst, wenn ich auf den Button clicke (Signal), wird das aktuell ausgewählte
Element in der ComboBox ausgewertet. In dem entsprechenden SLOT starte ich das File mit dem dazugehörigen Programm. (txt, pdf usw.)

Compilerfehler:
ASSERT: "index.isValid()" in file itemviews\qabstractitemview.cpp, line 1993

Was mache ich falsch? So bin ich vorgegangen:

Code: Alles auswählen

SLOT->
void Installer::openChosenFile()
{
	int column = Programmliste->currentColumn();
	int row = Programmliste->currentRow();

	if(Programmliste->cellWidget(row, column) != 0)
	{// Eine ComboBox ausgewählt
		QComboBox *combo = static_cast<QComboBox*>(Programmliste->cellWidget(row, column));
		QString temp = combo->currentText();
		QDir::convertSeparators (temp);
		openExternFile(temp);
	}

ClassicSubzero
Beiträge: 21
Registriert: 26. September 2006 13:38

Beitrag von ClassicSubzero »

Das Problem habe ich noch nicht gelöst. Die ComboBox ist nicht selected, wenn ich auf die clicke, deswegen sind QTableWidget->currentRow und TableWidget->currentColumn = -1.
:cry:
ClassicSubzero
Beiträge: 21
Registriert: 26. September 2006 13:38

Beitrag von ClassicSubzero »

Problem gelöst!
Beim dynamischen Kreieren einer ComboBox connecte ich:

Code: Alles auswählen

connect(box, SIGNAL(activated(QString)), this, SLOT(readComboBoxElement(QString)));
Slot ausprogrammiert ( hier belege ich die Member-variablen der Klasse mit Informationen :

Code: Alles auswählen

void Installer::readComboBoxElement(QString value)
{
	ComboBoxText = value;
	ComboBoxClicked = true;
}
Sobald der Button gedrückt wird:

Code: Alles auswählen

connect(pushButtonReadMe, SIGNAL (clicked()), this, SLOT(openChosenFile()));
Kann ich die Box ansprechen, d.h die readme-Files aus der Combobox durch das Drücken eines Buttons öffnen:

Code: Alles auswählen

void Installer::openChosenFile()
{
	int column = Programmliste->currentColumn();
	QString currentKey;
	QTableWidgetItem *selectedItem = new QTableWidgetItem;

		if(true == ComboBoxClicked)
		{// Eine ComboBox ausgewählt
			openExternFile(ComboBoxText);
			ComboBoxClicked = false;

		}

		else
		{

........
Antworten