Qt 4.8.0
#include <QtGui>
class TestWindow: public QWidget {
Q_OBJECT
QLabel *lblPrev, *lblCurr;
QTreeWidget *tree;
public:
TestWindow(QWidget *parent=0);
private slots:
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
};
#include "TestWindow.h"
TestWindow::TestWindow(QWidget *parent) : QWidget(parent) {
tree = new QTreeWidget();
tree->setSortingEnabled(true);
QTreeWidgetItem *twi;
twi = new QTreeWidgetItem();
twi->setText(0,"a");
tree->addTopLevelItem(twi);
twi = new QTreeWidgetItem();
twi->setText(0,"b");
tree->addTopLevelItem(twi);
lblPrev = new QLabel("previous");
lblCurr = new QLabel("current");
QVBoxLayout *vlayout = new QVBoxLayout();
QHBoxLayout *hlayout = new QHBoxLayout();
vlayout->addWidget(tree);
hlayout->addWidget(lblPrev);
hlayout->addWidget(lblCurr);
vlayout->addLayout(hlayout);
this->setLayout(vlayout);
connect(tree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
this, SLOT(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
tree->setCurrentItem(tree->topLevelItem(0));
}
void TestWindow::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) {
if(previous) {
if(previous->text(0) == "a") previous->setText(0, "c");
lblPrev->setText(previous->text(0));
} else {
lblPrev->setText("NULL");
}
if(current) {
lblCurr->setText(current->text(0));
} else {
lblCurr->setText("NULL");
}
}
На старте имеем выбранный элемент b, в метках: NULL/b. Кликаем по строке "a" в метках b/a. Пока все хорошо.
А теперь тыкаем в b, получаем "c" и "b" строки и c/b в метках. Но! "b" окружена пунктирной линией а синим выбрана "c".
Спрашивается, кто виноват, что делать и вообще? Как сделать чтобы при клике на "b" и пересортировке либо синее выделение следовало за "b", либо current получал значение "c" а не "b"?