Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Hero Sanya от Май 25, 2020, 14:25



Название: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Hero Sanya от Май 25, 2020, 14:25
Так, я писал код в рабочую программу, но потом понял, что не получается это сделать. Создал специальный примерочный код.
В нём тоже не получается. Компилятор естественно не показывает ошибок. Даже, если вместо переменной, я вставлю сразу тупо любой текст, он тоже не выведется, но, если дополнить код, отладочным сообщением(cout<<"я работаю"; ), то оно выведется и сразу после ui и после. То есть метод работает и вызывается, но не работает сам вызов setText'а.
.cpp - файл, который хочет вызвать метод, который выведет посланную переменную в интерфейс.
Код:
void one(){
    int i=0;
    MainWindow vivod;
    vivod.vivod_na_ekran(i);
}
Тут, для проверки. я просто в ручную подставлял цифорки в i=... Но чтобы я туда не вёл, это не выведется. Ну то есть сам ui не работает.

mainwindow.cpp - тот самый метод
Код:
void MainWindow::vivod_na_ekran(int i){
    ui->label_2->setText(QString::number(i));
}

Метод я сделал публичным.
Код:
public slots:

    void vivod_na_ekran(int i);
Я делал его и обычным методом, без слотов и в слотах.
Хотя на самом деле пытался и через публичную ui(по одной из подсказок, это называлось ленивым способом), но происходило тоже самое.


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Пантер от Май 25, 2020, 14:41
У тебя MainWindow уничтожается сразу после выхода из функции one.


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Hero Sanya от Май 25, 2020, 14:49
У тебя MainWindow уничтожается сразу после выхода из функции one.
Ну он же вызывает метод и даже отправляет туда переменную. Как это мешает ui->setText.


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: kambala от Май 25, 2020, 15:08
У тебя MainWindow уничтожается сразу после выхода из функции one.
из-за этого форма сразу же исчезает с экрана вместе со всем своим содержимым


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Пантер от Май 25, 2020, 15:19
Просто поменяй свой код на вот этот и проверь:
Код
C++ (Qt)
void one(){
   int i=0;
   MainWindow *vivod = new MainWindow;
   vivod->vivod_na_ekran(i);
   vivod->show();
}
 


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Hero Sanya от Май 25, 2020, 15:41
Просто поменяй свой код на вот этот и проверь:
Код:
void one(){
    int i=0;
    MainWindow *vivod = new MainWindow;
    vivod->vivod_na_ekran(i);
    vivod->show();
}

Ну, в этом случае, появляется второй экран, который перегораживает первый, не позволяя с ним что либо делать.
Если убрать vivod->show(), то останется обычный экран, на котором изменение текста не происходит.


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Пантер от Май 25, 2020, 15:49
А зачем ты делаешь MainWindow vivod? Что-то мне кажется, что у тебя опять напутано все в плане c++. Приведи минимальный полный код.


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Hero Sanya от Май 25, 2020, 16:44
А зачем ты делаешь MainWindow vivod? Что-то мне кажется, что у тебя опять напутано все в плане c++. Приведи минимальный полный код.
Это и есть минимальный полный код.
Больше только весь код.
но там добавить нечего.

код кнопки:
Код:
void MainWindow::on_pushButton_clicked()
{
   one();
}

Код метода, который выводит переменную.
Код:
void MainWindow::vivod_na_ekran(int i){
    ui->label->setText(QString::number(i));
}

Код вызывающей функции:
Код:
#include "mainwindow.h"
#include <math.h>

#include <iostream>
using namespace std;

#include "four.h"
#include <stdlib.h>

void one(){
    int i=12;
    MainWindow *vivod = new MainWindow;
    vivod->vivod_na_ekran(i);
    //vivod->show();
    }

.h
Код:
#ifndef FOUR_H
#define FOUR_H
void one();
#endif // FOUR_H

Просто, выводится цифра, на подменённом экране, не закрывая старого даже. А проблема в том, что через подмену экрана я не могу реализовать. У меня внутри функции будет, что то типо счётчика загрузки.





Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Пантер от Май 25, 2020, 18:00
Ты вызываешь из MainWindow свободную функцию, которая не имеет доступа к этому MainWindow. Сделай one  членом класса MainWindow или передавай в one указатель на MainWindow
Код
C++ (Qt)
void one (MainWindow *w) {
 w->vivod_na_ekran(10);
}
..........
one(this)
 


Название: Re: Вывод сообщения в графический интерфейс из другого файла.
Отправлено: Hero Sanya от Май 25, 2020, 18:14
Ты вызываешь из MainWindow свободную функцию, которая не имеет доступа к этому MainWindow. Сделай one  членом класса MainWindow или передавай в one указатель на MainWindow
Код
C++ (Qt)
void one (MainWindow *w) {
 w->vivod_na_ekran(10);
}
..........
one(this)
 
Да, с указателем, сработало. Спасибо.