class Zzz : public QWidget
{
Q_OBJECT
public:
Zzz()
{
qlw = new QListWidget(this); // this = parent
connect(this, SIGNAL(signalLog), this, SLOT(slotLog()));
}
void log(const char *_str)
{
m_log_string = _str;
signalLog();
}
QListWidget *qlw;
std::string m_log_string;
signals:
void signalLog();
public clots:
void slotLog()
{
qlw->addItem(m_log_string.c_str());
}
};
Писал по памяти, возможны ошибки. Кто шарит в Qt, тот суть понял: дёргаем log(), добавляется строка на экранный список.
Если дёргать log() очень быстро, то на экране строки появляются сразу пачками и только тогда, когда мы прекращаем его часто дёргать. То есть, если какой-то процесс вывалил гору строк с интервалом в 50 мс, то все эти строки появятся только целой горой.
Меня это чё-то мало устраивает. Хочу синхронности. То есть, чтобы слот завершал работу только тогда, когда экранное состояние списка будет перерисовано под новое содержимое.
Ниже приведены штукиъ, которые в разных комбинациях втыкались в slotLog(), но максимальный полученный эффект - это синхронное уменьшение размера ползунка скролл-бара, а строки по-прежнему появляются целой кучей за раз. Ну чё, вопрос традиционный - спасите-помогите (-;
Добавляемые в слот, но не помогающие ШтукиЪ:
qlw->viewport()->update();
qlw->viewport()->repaint();
qlw->update();
qlw->repaint();
QApplication::processEvents();