Russian Qt Forum

Qt => Вопросы новичков => Тема начата: shtrix от Июнь 14, 2015, 14:01



Название: что то типа своего QProgressDialog
Отправлено: shtrix от Июнь 14, 2015, 14:01
Пишу в QT Creator.
Создаю проект.
Кидаю на форму кнопку.
mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    Form* wait=new Form;
    wait->show();
    wait->start();
}

Добавляю в проект класс формы form.
кидаю на форму QProgressBar.
form.cpp
Код:
#include "form.h"
#include "ui_form.h"
#include <QThread>
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}

Form::~Form()
{
    delete ui;
}

void Form::start()
{
    for(int i=0;i<100;i++)
    {
        ui->progressBar->setValue(i);
        QThread::msleep(50);

    }
}

При нажатии на кнопку появляется вторая форма полностью белая висит какое то время потом появляется фон на форме и  заполненный  progressBar.
Почему?
Хочу сделать из второй формы что то типа своего QProgressDialog.


Название: Re: что то типа своего QProgressDialog
Отправлено: sociopath от Июнь 14, 2015, 17:20
Код:
ui->progressBar->setValue(i);
Вот этот код хоть и устанавливает прогресс в progressbar, однако его перерисовка произойдет только тогда, когда приложение получит квант времени на событие перерисовки gui. А в течение функции start() приложение это самое время не получает. Чтобы заставить окна приложения перерисоваться, можно воспользоваться qApp->processEvents() (для ее использования нужно подключить QApplication):
Код:
void Form::start()
{
    for(int i=0;i<100;i++)
    {
        ui->progressBar->setValue(i);
        qApp->processEvents();
        QThread::msleep(50);
    }
}

ps: надеюсь, msleep вы используете только в целях тестирования


Название: Re: что то типа своего QProgressDialog
Отправлено: shtrix от Июнь 14, 2015, 17:43
sociopath
Спасибо за помощь все работает ))