Russian Qt Forum
Ноябрь 25, 2024, 10:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: что то типа своего QProgressDialog  (Прочитано 2106 раз)
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.
« Последнее редактирование: Июнь 14, 2015, 15:54 от shtrix » Записан
sociopath
Гость
« Ответ #1 : Июнь 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 вы используете только в целях тестирования
Записан
shtrix
Гость
« Ответ #2 : Июнь 14, 2015, 17:43 »

sociopath
Спасибо за помощь все работает ))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 20.