Package: libqt4-gui Version: 4.4.0~rc1-5 Severity: normal Hi all,
I've seen an incorrect behaviour in my application ever since QT4.4 was uploaded to unstable. I've created a minimal test case to demonstrate the problem - I think the root of the issue is in the QTreeWidgetItemIterator class. The test program creates a QTreeWidget, sets "extended" selection mode, and attempts to maintain a bit of state about whether anything is selected at all (treeSelected variable) and a pointer to the treeWidgetItem if only one item is selected (treeSingleSelection). If you run the test program and select one item, you will see the state is wrong right away. If you then select a different item, it corrects itself. If you unselect the item, its incorrect again. Hope you guys can get this fixed soon (or point out the problem in my test case, I'm happy to be shown its wrong!), as my app now has major problems without this functionality. This test case works as expected under all versions of QT4.3 that I've used (since 4.3.1). Thanks! -- Nathan 16:41 [EMAIL PROTECTED] ~/treeiterators 13> ls main.cpp main.h test.cpp test.h test.pro 16:41 [EMAIL PROTECTED] ~/treeiterators 14> cat test.pro TEMPLATE = app LANGUAGE = C++ HEADERS = test.h main.h SOURCES = test.cpp main.cpp CONFIG += qt warn_on debug 16:41 [EMAIL PROTECTED] ~/treeiterators 15> cat test.h #include <QTreeWidget> #include <QTreeWidgetItem> class TestTree : public QTreeWidget { Q_OBJECT public: TestTree(QWidget *parent = 0); public slots: void itemSelectionChanged(); private: bool treeSelected; QTreeWidgetItem *treeSingleSelection; }; 16:41 [EMAIL PROTECTED] ~/treeiterators 16> cat main.h #include <QMainWindow> class TestTree; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); private: TestTree *treeWidget; }; 16:41 [EMAIL PROTECTED] ~/treeiterators 17> cat test.cpp #include "test.h" #include <QStringList> TestTree::TestTree(QWidget *parent) : QTreeWidget(parent), treeSelected(false), treeSingleSelection(NULL) { setColumnCount(1); setSelectionMode(QAbstractItemView::ExtendedSelection); QList<QTreeWidgetItem *> items; for (int i = 0; i < 10; i++) { QTreeWidgetItem *test = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))); items.append(test); fprintf(stderr, "ctor added tree item: %p\n", test); } insertTopLevelItems(0, items); connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); fprintf(stderr, "ctor end: treeSingleSelection=%p treeSelected=%s\n", treeSingleSelection, treeSelected ? "true" : "false"); } void TestTree::itemSelectionChanged() { QTreeWidgetItemIterator iterator(this, QTreeWidgetItemIterator::Selected); fprintf(stderr, "start: treeSingleSelection=%p treeSelected=%s\n", treeSingleSelection, treeSelected ? "true" : "false"); treeSingleSelection = *iterator; if ((treeSelected = (treeSingleSelection != NULL))) if (*(++iterator) != NULL) treeSingleSelection = NULL; // multiple selections fprintf(stderr, "end: treeSingleSelection=%p treeSelected=%s\n", treeSingleSelection, treeSelected ? "true" : "false"); } 16:41 [EMAIL PROTECTED] ~/treeiterators 18> cat main.cpp #include <QApplication> #include <QMainWindow> #include "test.h" #include "main.h" MainWindow::MainWindow() : QMainWindow() { treeWidget = new TestTree(); setCentralWidget(treeWidget); setWindowTitle(tr("Tree Widget Selection Test")); resize(200, 200); } int main(int argc, char **argv) { QApplication app(argc, argv); MainWindow mainWin; mainWin.show(); return app.exec(); } 16:41 [EMAIL PROTECTED] ~/treeiterators 19> -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]