QTableWidget und SQL => sortier Problem
Verfasst: 30. Oktober 2009 17:24
Hallo,
ich habe ein QTableWidget und das wird per SQL gefüllt.
Meine Idee war, das sortieren zu erlauben und in Abhängigkeit von der Spalte und Sortierrichtung das SQL ebenfalls dynamisch zu sortieren,
Mein Problem ist jedoch das die eigentliche Spalte sortiert ist aber der "Rest" der Spalten durcheinander ist. Jedenfalls lässt sich da keine Sortierung erkennen :
Hier ein bisschen Code.
Habe ich einen Denkfehler ?
Definition :
Befüllen :
SQL wird dann gebaut mit entsprechendem order by (ist korrekt) und anschließend die Items gefüllt und angezeigt:
ich habe ein QTableWidget und das wird per SQL gefüllt.
Meine Idee war, das sortieren zu erlauben und in Abhängigkeit von der Spalte und Sortierrichtung das SQL ebenfalls dynamisch zu sortieren,
Mein Problem ist jedoch das die eigentliche Spalte sortiert ist aber der "Rest" der Spalten durcheinander ist. Jedenfalls lässt sich da keine Sortierung erkennen :
Hier ein bisschen Code.
Habe ich einen Denkfehler ?
Definition :
Code: Alles auswählen
tableheader.append(tr("Datum"));
tableheader.append(tr("Typ"));
tableheader.append(tr("Benutzer"));
tableheader.append(tr("Auftrag Nr"));
tableheader.append(tr("Änderungscontext"));
tableWidgetRMSLog->setColumnCount(5);
tableWidgetRMSLog->setRowCount(1);
tableWidgetRMSLog->setHorizontalHeaderLabels(tableheader);
tableWidgetRMSLog->setSortingEnabled(true);
tableWidgetRMSLog->horizontalHeader()->setSortIndicator(0, Qt::DescendingOrder);
Code: Alles auswählen
tableWidgetRMSLog->clearContents();
...
if (tableWidgetRMSLog->isSortingEnabled()) {
//1.Colum
if (tableWidgetRMSLog->horizontalHeader()->sortIndicatorSection() <= 0) {
if (tableWidgetRMSLog->horizontalHeader()->sortIndicatorOrder() == Qt::AscendingOrder) {
orderStmt = "ORDER BY timestamp ASC";
} else {
orderStmt = "ORDER BY timestamp DESC";
};
};
} else {
orderStmt = "ORDER BY timestamp DESC";
};
Code: Alles auswählen
if (query.size() > 0) {
tableWidgetRMSLog->setRowCount(query.size());
int r=0;
while (query.next()) {
QColor bgcolor = Qt::white;
if (query.value(2).toString() == "warning") {
bgcolor = Qt::yellow;
} else if (query.value(2).toString() == "error") {
bgcolor = Qt::gray;
} else if (query.value(2).toString() == "critical") {
bgcolor = Qt::red;
};
QDateTime date = QDateTime::fromTime_t(query.value(0).toInt());
QTableWidgetItem *timestamp = new QTableWidgetItem(date.toString("dd.MM.yyyy hh:mm:ss"));
timestamp->setFlags(Qt::ItemIsSelectable);
timestamp->setTextAlignment(Qt::AlignLeft | Qt::AlignTop);
timestamp->setBackgroundColor(bgcolor);
timestamp->setTextColor(Qt::black);
QTableWidgetItem *item = new QTableWidgetItem(query.value(1).toString());
item->setFlags(Qt::ItemIsSelectable);
item->setTextAlignment(Qt::AlignLeft | Qt::AlignTop);
item->setBackgroundColor(bgcolor);
item->setTextColor(Qt::black);
QTableWidgetItem *changer = new QTableWidgetItem(query.value(3).toString());
changer->setFlags(Qt::ItemIsSelectable);
changer->setTextAlignment(Qt::AlignLeft | Qt::AlignTop);
changer->setBackgroundColor(bgcolor);
changer->setTextColor(Qt::black);
QString tID = query.value(4).toString();
if (tID == "0")
tID = tr("N/A");
QTableWidgetItem *taskid = new QTableWidgetItem(tID);
taskid->setFlags(Qt::ItemIsSelectable);
taskid->setTextAlignment(Qt::AlignLeft | Qt::AlignTop);
taskid->setBackgroundColor(bgcolor);
taskid->setTextColor(Qt::black);
QByteArray contextB64 = QByteArray::fromBase64(query.value(5).toByteArray());
QTableWidgetItem *context = new QTableWidgetItem( QString(contextB64) );
QString myToolTip = QString(contextB64) + toolTipHelp;
context->setToolTip(myToolTip);
context->setFlags(Qt::ItemIsSelectable);
context->setTextAlignment(Qt::AlignLeft | Qt::AlignTop);
context->setBackgroundColor(bgcolor);
context->setTextColor(Qt::black);
tableWidgetRMSLog->setItem(r, 0, timestamp);
tableWidgetRMSLog->setItem(r, 1, item);
tableWidgetRMSLog->setItem(r, 2, changer);
tableWidgetRMSLog->setItem(r, 3, taskid);
tableWidgetRMSLog->setItem(r, 4, context);
r++;
};
} else {
unwichtig
};
/*
* resize columns automatically.
* Rows are resized by double click.
*/
tableWidgetRMSLog->resizeColumnsToContents();