Название: Обращение к виджету из другого класса Отправлено: Ody от Февраль 10, 2020, 15:17 Постараюсь описать проблему:
mainwindow.h Код: #ifndef MAINWINDOW_H mainwindow.cpp Код: #include "mainwindow.h" test.h Код: #ifndef TEST_H test.cpp Код: #include "test.h" Код: set_tw_check_file_insert_row(); Собственно вопрос такой, не создается строка и не проходит команда. Может кто-то подскажет что делаю не так! Если в реализации void MainWindow::set_tw_check_file_insert_row() { ui->tableWidget->insertRow(ui->tableWidget->rowCount()); } Ввести qDegug() << "ТЕст"; то qDebug() срабатывает Название: Re: Обращение к виджету из другого класса Отправлено: Apktyc от Февраль 10, 2020, 15:27 Если коротко, то читайте о системе сигналов и слотов (https://doc.qt.io/qt-5/signalsandslots.html)
У вас в методе calculate создается объект класса MainWindow (не имеет отношения к вашему окну), для него выполняется метод set_tw_check_file_insert_row(), и объект сразу удаляется, при выходе за пределы видимости. Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 10, 2020, 15:30 Да я то читал про сигнал и слоты и использую. только не могу понять как их реализовать в данном случае
Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 10, 2020, 15:35 Подскажите новичку, а то весь мозг сломал!
Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 10, 2020, 15:47 Да я то читал про сигнал и слоты и использую. только не могу понять как их реализовать в данном случае Пробовал испустить сигнал с помощью emit тоже не выходит Название: Re: Обращение к виджету из другого класса Отправлено: Apktyc от Февраль 10, 2020, 15:49 В классе Test создать сигнал об окончании вычислений и посылать его в конце calculate
Код В MainWindow связываем все это дело Код Где TestObject указатель на объект класса Test созданный вами ранее. Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 10, 2020, 18:34 не сработало. может что-то не так сделал?!
void MainWindow::on_pushButton_clicked() { Test t; connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row); } Название: Re: Обращение к виджету из другого класса Отправлено: Apktyc от Февраль 10, 2020, 23:09 не сработало. может что-то не так сделал?! void MainWindow::on_pushButton_clicked() { Test t; connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row); } При клике на кнопку (подозреваю связь установлена в редакторе форма), создается объект класса Test и соединяется сигнал Test::isDone с методом MainWindow::set_tw_check_file_insert_row. И собственно сразу объект уничтожается. Нет вызова метода calculate, в конце исполнения которого, по идее, находится отсылка этого сигнала. Вообще не понятно, чего именно вы пытаетесь добиться, классы MainWindow и Test никак не связаны между собой, можно без заморочки написать так Код Но все это выполняется в интерфейсном потоке, и в случае долгих вычислений в calculate - подвиснет приложение. Название: Re: Обращение к виджету из другого класса Отправлено: ssoft от Февраль 11, 2020, 04:45 не сработало. может что-то не так сделал?! void MainWindow::on_pushButton_clicked() { Test t; connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row); } Конечно не так). Как минимум, здесь t уничтажается сразу после выхода из зоны видимости метода on_pushButton_clicked. Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 11, 2020, 07:05 не сработало. может что-то не так сделал?! void MainWindow::on_pushButton_clicked() { Test t; connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row); } При клике на кнопку (подозреваю связь установлена в редакторе форма), создается объект класса Test и соединяется сигнал Test::isDone с методом MainWindow::set_tw_check_file_insert_row. И собственно сразу объект уничтожается. Нет вызова метода calculate, в конце исполнения которого, по идее, находится отсылка этого сигнала. Вообще не понятно, чего именно вы пытаетесь добиться, классы MainWindow и Test никак не связаны между собой, можно без заморочки написать так Код Но все это выполняется в интерфейсном потоке, и в случае долгих вычислений в calculate - подвиснет приложение. суть в том что в классе тест происходит работа с открываемым файлом, разбирается его содержимое. Файл бинарный. И там в методе Calculate класса Test Проверка условия, если допустим 40 и 41 байт дают значение 4, то запускается цикл, который повторяется 4 раза. На каждой итерации записывается в переменные значение следующих байт. Сразу происходит проверка их на соответствие чему надо и после, их надо независимо от результата передать для отображения в таблицу пользователю. по этому такая странная реализация. Переменные нужны в классе Test, на основе них идет дальше вычисление. клик на кнопку это имитация того что после выбора файла в директории он как бы передается в Класс Test и с файл там разбирают и мучают. Название: Re: Обращение к виджету из другого класса Отправлено: Ody от Февраль 11, 2020, 07:11 не сработало. может что-то не так сделал?! void MainWindow::on_pushButton_clicked() { Test t; connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row); } объявил переменную класса Test в Mainwindow.h Код: #ifndef MAINWINDOW_H Выбрасыват ошибку ASSERT: "c->sender == q_ptr" in file kernel\qobject.cpp, line 391 Конечно не так). Как минимум, здесь t уничтажается сразу после выхода из зоны видимости метода on_pushButton_clicked. Название: Re: Обращение к виджету из другого класса Отправлено: Apktyc от Февраль 11, 2020, 13:54 Выбрасыват ошибку ASSERT: "c->sender == q_ptr" in file kernel\qobject.cpp, line 391 Там случаем не connect(&t, ...) остался? |