QTableWidget auffrischen
Verfasst: 18. Dezember 2006 21:24
Hallo allerseits,
ich will folgenden Slot verwenden um die Werte die in einer QTableWidget zu ändern. Wenn in der entsprechenden Zelle schon ein QTableWidgetItem ist soll der Text geändert werden ansonsten will ich ein neues Item erstellen.
Vorher nehm ich noch die Verbindung Zwischen dem cellChanged-Signal und meinem Daten-Manager weg.
Der Slot wird aufgerufen wenn der Benutzer ein Tab öffnet in dem das TableWidget drin ist.
Ein erstes mal wird es aufgerufen solange noch ein anders Tab offen ist. Da funktioniert es.
Und so lange ich die DAten nicht ändere, kann ich es auch noch öfter aufrufen. Sobald jedoch die Daten, die angezeigt werden sollen irgendwie geändert werden stürzt das Programm in dieser Prozedur mit segfault ab.
Hat jemand ideen? Vielen Dank und eine schöne rest-Adventszeit, Martin
ich will folgenden Slot verwenden um die Werte die in einer QTableWidget zu ändern. Wenn in der entsprechenden Zelle schon ein QTableWidgetItem ist soll der Text geändert werden ansonsten will ich ein neues Item erstellen.
Vorher nehm ich noch die Verbindung Zwischen dem cellChanged-Signal und meinem Daten-Manager weg.
Der Slot wird aufgerufen wenn der Benutzer ein Tab öffnet in dem das TableWidget drin ist.
Ein erstes mal wird es aufgerufen solange noch ein anders Tab offen ist. Da funktioniert es.
Und so lange ich die DAten nicht ändere, kann ich es auch noch öfter aufrufen. Sobald jedoch die Daten, die angezeigt werden sollen irgendwie geändert werden stürzt das Programm in dieser Prozedur mit segfault ab.
Code: Alles auswählen
void mainWindow::retable(int index)
{
if (index == 0)
{
QObject::disconnect(daten, SLOT(changeValue(int, int)));
std::cout << "refreshing table view" << tableWidget->rowCount() << " " << tableWidget->columnCount() << std::endl;
tableWidget->setColumnCount ( daten->data.size()*2 );
tableWidget->setRowCount ( daten->data.begin()->second.x.size() );
//tableWidget->clear();
QStringList headers;
int k(0);
for (DMAN_MAP_TYPE::iterator i = daten->data.begin(); i != daten->data.end(); i++)
{
int j;
for (j=0; j < i->second.x.size(); j++)
{
std::cout << j << " " << k << std::endl;
if (tableWidget->item(j, k*2))
{
std::cout << "is schon da" << std::endl;
tableWidget->item(j, k*2)->setText(locale->toString(i->second.x[j]));}
else
{
std::cout << "is nich da" << std::endl;
QTableWidgetItem *item = new QTableWidgetItem(locale->toString(i->second.x[j]));
tableWidget->setItem(j, k*2, item);
}
if (tableWidget->item(j,k*2+1)) tableWidget->item(j, k*2+1)->setText(locale->toString(i->second.y[j]));
else
{
QTableWidgetItem *item2 = new QTableWidgetItem(locale->toString(i->second.y[j]));
tableWidget->setItem(j, k*2+1, item2);
}
}
headers.append(i->first);
headers.append(i->first);
++k;
}
tableWidget->setHorizontalHeaderLabels ( headers );
}
QObject::connect(tableWidget, SIGNAL(cellChanged(int,int)), daten, SLOT(changeValue(int, int)));
}