I was doing the update in a thread, in my app, the fields need to be recalculated, which take several seconds. I hope to use thread so the GUI won't freeze. But then it does not update...
#include <QApplication>
#include <QThread>
#include <QtGui>
#include <iostream>
public:
protected:
void run()
{
std::cout << "MyThread::run called" << std::endl;
static int x = 0;
int i = 0;
while(*iter) {
(*iter
)->setText
(0,
QString("row:%1 - modified: %2 times").
arg(i
).
arg(x
));
++i; ++iter;
}
x++;
}
private:
};
{
Q_OBJECT
public:
{
thread = new MyThread( treeWidget );
for (int i = 0; i < 50; ++i)
setCentralWidget(treeWidget);
}
if ( !thread->isRunning() ) thread->start();
}
private:
};
#include "main.moc"
int main(int argc, char* argv[])
{
MainWindow mw;
mw.show();
return app.exec();
}
#include <QApplication>
#include <QThread>
#include <QtGui>
#include <iostream>
class MyThread : public QThread {
public:
MyThread( QTreeWidget* w ) : treeWidget( w ) {}
protected:
void run()
{
std::cout << "MyThread::run called" << std::endl;
static int x = 0;
QTreeWidgetItemIterator iter(treeWidget, QTreeWidgetItemIterator::All);
int i = 0;
while(*iter) {
(*iter)->setText(0, QString("row:%1 - modified: %2 times").arg(i).arg(x));
++i; ++iter;
}
x++;
}
private:
QTreeWidget* treeWidget;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent=0) : QMainWindow(parent)
{
treeWidget = new QTreeWidget;
thread = new MyThread( treeWidget );
for (int i = 0; i < 50; ++i)
treeWidget->addTopLevelItem(new QTreeWidgetItem);
setCentralWidget(treeWidget);
QMainWindow::startTimer(2000);
}
void timerEvent(QTimerEvent* ) {
if ( !thread->isRunning() ) thread->start();
}
private:
QTreeWidget* treeWidget;
QThread* thread;
};
#include "main.moc"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow mw;
mw.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks