студенческом проекте и ковыряю уже написанный код. Есть форма - две кнопки и окно для построения картинки. Первая кнопка загружает конфиг, вторая запускает расчет(функция). В расчетах только циклы и условия, подразумевается несколько итераций. Проблема такая, что во время расчета намертво зависает окно программы, после расчета все отвисает и строится график. Понимаю, что вопрос несколько общий, но все же есть ли какие рекомендации или может на опыте кто поймет в чем дело.
connect(ui->m_load,SIGNAL(clicked()),SLOT(InitFlow()));
connect(ui->m_run,SIGNAL(clicked()),SLOT(RunFlow()));
Может ли на это влиять вывод в консоль Qt Creator различных данных?
в качестве костыля можно дёргать https://doc.qt.io/qt-5/qcoreapplication.html#processEvents а вообще вынести бы расчёты в отдельный поток
У вас рассчет функции блокирующий?
У меня пока не хватает знаний, чтобы ответить на ваш вопрос ). На форме есть кнопка, через connect она соединена с функцией. Выглядит, что как-будто работе ui не должна мешать.
Сколько времени занимает выполнение функции рассчета?
одна итерация 30 сек, чтобы был результат надо штук 200 итераций
Хм. Похоже что вы просто блокируете UI поток
вот так реализовано MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->m_load,SIGNAL(clicked()),SLOT(InitFlow())); connect(ui->m_run,SIGNAL(clicked()),SLOT(RunFlow())); this->m_pFlow = new TFlow; this->painter = new QPainter(); } void MainWindow::InitFlow() { m_pFlow->initflow("Path_to_config"); } void MainWindow::RunFlow() { for (int i = 0; i < ui->m_iter->text().toInt(); i++) { qDebug() << i; m_pFlow->iterflow(); } }
Обсуждают сегодня