QT - Пошаговое добавление виджетов в горизонтальную компоновку

У меня есть горизонтальный макет, и когда пользователь вводит число, я добавляю это количество виджетов (содержащих изображение) в этот макет.

void MainWindow::on_pushButton_2_clicked()
{
    for(int i=0; i<count; i++)
    {
        ui->horizontalLayout_4->addWidget(label);
    }
}

Например, если пользователь вводит 100, эта функция повторяется 100 раз, и после того, как функция завершит свое выполнение, она одновременно добавит 100 виджетов.

Но я хочу, чтобы функция добавляла виджеты шаг за шагом.

Например, когда i=0, он добавляет, когда i=1, он добавляет. И пользователь должен видеть добавление элементов шаг за шагом.

Является ли это возможным?


person abby    schedule 07.05.2013    source источник
comment
попробовать usleep() ? также было бы неплохо поместить это в QThread   -  person Thomas Ruiz    schedule 08.05.2013


Ответы (2)


В on_pushButtonQTimerclicked вы можете запустить QTimer, подключенный к слоту, который добавляет один виджет. Дайте таймеру разумный тайм-аут, чтобы вы могли «видеть» каждый добавляемый виджет. Затем используйте счетчик в своем классе, чтобы знать, когда остановить таймер. Итак, если пользователь ввел 10, установите счетчик на 10 и вычтите из него единицу каждый раз, когда срабатывает таймер. Остановите таймер, когда счетчик достигнет нуля.

person kenrogers    schedule 07.05.2013
comment
я пытался, но я хочу добавить этот виджет именно тогда, когда я вызывал ui->horizontalLayout_4->addWidget(label);, когда я использую QTimer, виджеты добавляются после завершения цикла for. мой таймер и соединение выглядят так QTimer *timer = new QTimer(this); timer->start(500); connect(timer, SIGNAL(timeout()), this, SLOT(currentplaying())); - person abby; 12.05.2013
comment
Если вы хотите добавить их все по одному в on_pushButton_2_clicked, вы можете оставить свой код как есть, но добавить спящий режим и вызов QCoreApplication::processEvents на каждой итерации. - person kenrogers; 13.05.2013

я бы реализовал таймер, который дает возможность пользовательскому интерфейсу обновляться между каждым кадром

person Luca Rocchi    schedule 07.05.2013