Seite 1 von 1

QTableWidget + ComboBox, über Button ansprechen

Verfasst: 17. Oktober 2006 15:10
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);
	}


Verfasst: 18. Oktober 2006 09:08
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:

Verfasst: 18. Oktober 2006 10:37
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
		{

........