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]

Reply via email to