Details
-
Bug
-
Resolution: Out of scope
-
P3: Somewhat important
-
4.2.2
-
None
Description
The following apps shows the differences:
Qt 4
#include <QListWidget>
#include <QWidget>
#include <QString>
#include <QTime>
#include <QApplication>
#include <QListWidgetItem>
#include <QShortcut>
#include <QKeySequence>
static int itemCount = 50000;
static int selectAmount = 5000;
class ListWidget : public QListWidget
{
Q_OBJECT
public:
ListWidget(QWidget *parent = 0)
: QListWidget(parent)
{
for (int i=0; i<itemCount; ++i)
new QShortcut(QKeySequence(Qt::Key_F2), this, SLOT(selectRandomAmountOfItems()));
setSelectionMode(ExtendedSelection);
}
public slots:
void selectRandomAmountOfItems()
{
clearSelection();
QTime timer;
timer.start();
int i = 0;
do {
QListWidgetItem *it = item(rand() % itemCount);
if (!isItemSelected(it))
} while (i < selectAmount);
qDebug("%d elapsed", timer.elapsed());
}
};
#include "main.moc"
int main(int argc, char **argv)
{
if (argc > 1)
QApplication a(argc, argv);
ListWidget w;
w.show();
return a.exec();
}
Qt 3:
#include <qapplication.h>
#include <qlistbox.h>
#include <qwidget.h>
#include <qstring.h>
#include <qaccel.h>
#include <qdatetime.h>
static int itemCount = 50000;
static int selectAmount = 5000;
class ListWidget : public QListBox
{
Q_OBJECT
public:
ListWidget(QWidget *parent = 0)
: QListBox(parent)
{
for (int i=0; i<itemCount; ++i) { new QListBoxText(this, QString("Item number %1").arg(i)); }
QAccel *accel = new QAccel(this);
accel->connectItem(accel->insertItem(Key_F2),
this, SLOT(selectRandomAmountOfItems()));
setSelectionMode(Extended);
}
public slots:
void selectRandomAmountOfItems()
{
clearSelection();
QTime timer;
timer.start();
int i = 0;
do {
const int index = rand() % itemCount;
if (!isSelected(index)) { ++i; setSelected(index, true); }
} while (i < selectAmount);
qDebug("%d elapsed", timer.elapsed());
}
};
#include "main.moc"
int main(int argc, char **argv)
{
if (argc > 1) { itemCount = atoi(argv[1]); if (argc > 2) selectAmount = atoi(argv[2]); }
QApplication a(argc, argv);
ListWidget w;
w.show();
return a.exec();
}
To invoke a random selection press F2.
Started like this "./test 5000 1000" I get these results:
Qt 3: 48 elapsed
Qt 4: 2299 elapsed