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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 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
#define MAINWINDOW_H

#include <QMainWindow>
#include "test.h"


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    Test *t;


Выбрасыват ошибку ASSERT: "c->sender == q_ptr" in file kernel\qobject.cpp, line 391



Конечно не так). Как минимум, здесь t уничтажается сразу после выхода из зоны видимости метода on_pushButton_clicked.
2  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 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 никак не связаны между собой, можно без заморочки написать так
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
 Test t;
 t.calculate();
 set_tw_check_file_insert_row();
}
 
Но все это выполняется в интерфейсном потоке, и в случае долгих вычислений в calculate - подвиснет приложение.




суть в том что в классе тест происходит работа с открываемым файлом, разбирается его содержимое.  Файл бинарный. И там в методе Calculate класса Test Проверка условия, если допустим 40 и 41 байт дают значение 4, то запускается цикл, который повторяется 4 раза. На каждой итерации записывается в переменные значение следующих байт. Сразу происходит проверка их на соответствие чему надо и после,  их надо независимо от результата передать для отображения в таблицу пользователю.

по этому такая странная реализация.

Переменные нужны в классе Test, на основе них идет дальше вычисление.

клик на кнопку это имитация того что после выбора файла в директории он как бы передается в Класс Test и с файл там разбирают и мучают.


3  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 10, 2020, 18:34
не сработало. может что-то не так сделал?!

void MainWindow::on_pushButton_clicked()
{
    Test t;
    connect(&t, &Test::isDone, this, &MainWindow::set_tw_check_file_insert_row);
}
4  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 10, 2020, 15:47
Да я то читал про сигнал и слоты и использую. только не могу понять как их реализовать в данном случае


Пробовал испустить сигнал с помощью emit тоже не выходит
5  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 10, 2020, 15:35
Подскажите новичку, а то весь мозг сломал!
6  Qt / Общие вопросы / Re: Обращение к виджету из другого класса : Февраль 10, 2020, 15:30
Да я то читал про сигнал и слоты и использую. только не могу понять как их реализовать в данном случае
7  Qt / Общие вопросы / Обращение к виджету из другого класса : Февраль 10, 2020, 15:17
Постараюсь описать проблему:

mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "test.h"
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
 
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void set_tw_check_file_insert_row();
 
 
private slots:
    void on_pushButton_clicked();
 
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::set_tw_check_file_insert_row()
{
        ui->tableWidget->insertRow(ui->tableWidget->rowCount());
}

test.h
Код:
#ifndef TEST_H
#define TEST_H
 
 
class Test
{
public:
    Test();
    void calculate();
};
 
#endif // TEST_H

test.cpp
Код:
#include "test.h"
#include "mainwindow.h"
 
Test::Test()
{
 
}
 
void Test::calculate()
{
    MainWindow mw;
    mw.set_tw_check_file_insert_row();
}
Есть кнопка по нажатии которой вызывается метод Calculate, в котором условно происходит сложные вычисления. После вызывает метод

Код:
set_tw_check_file_insert_row();
который добавляет строку новую строку в TableWidget информацией и результатами.

Собственно вопрос такой, не создается строка и не проходит команда. Может кто-то подскажет что делаю не так!


Если в реализации


void MainWindow::set_tw_check_file_insert_row()
{
        ui->tableWidget->insertRow(ui->tableWidget->rowCount());
}
Ввести qDegug() << "ТЕст";

то qDebug() срабатывает
Страниц: [1]

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