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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод сообщения в графический интерфейс из другого файла.  (Прочитано 4069 раз)
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« : Май 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(по одной из подсказок, это называлось ленивым способом), но происходило тоже самое.
« Последнее редактирование: Май 25, 2020, 14:53 от Hero Sanya » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 25, 2020, 14:41 »

У тебя MainWindow уничтожается сразу после выхода из функции one.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #2 : Май 25, 2020, 14:49 »

У тебя MainWindow уничтожается сразу после выхода из функции one.
Ну он же вызывает метод и даже отправляет туда переменную. Как это мешает ui->setText.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Май 25, 2020, 15:08 »

У тебя MainWindow уничтожается сразу после выхода из функции one.
из-за этого форма сразу же исчезает с экрана вместе со всем своим содержимым
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Май 25, 2020, 15:19 »

Просто поменяй свой код на вот этот и проверь:
Код
C++ (Qt)
void one(){
   int i=0;
   MainWindow *vivod = new MainWindow;
   vivod->vivod_na_ekran(i);
   vivod->show();
}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #5 : Май 25, 2020, 15:41 »

Просто поменяй свой код на вот этот и проверь:
Код:
void one(){
    int i=0;
    MainWindow *vivod = new MainWindow;
    vivod->vivod_na_ekran(i);
    vivod->show();
}

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Май 25, 2020, 15:49 »

А зачем ты делаешь MainWindow vivod? Что-то мне кажется, что у тебя опять напутано все в плане c++. Приведи минимальный полный код.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #7 : Май 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

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



Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Май 25, 2020, 18:00 »

Ты вызываешь из MainWindow свободную функцию, которая не имеет доступа к этому MainWindow. Сделай one  членом класса MainWindow или передавай в one указатель на MainWindow
Код
C++ (Qt)
void one (MainWindow *w) {
 w->vivod_na_ekran(10);
}
..........
one(this)
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hero Sanya
Новичок

Offline Offline

Сообщений: 34



Просмотр профиля
« Ответ #9 : Май 25, 2020, 18:14 »

Ты вызываешь из MainWindow свободную функцию, которая не имеет доступа к этому MainWindow. Сделай one  членом класса MainWindow или передавай в one указатель на MainWindow
Код
C++ (Qt)
void one (MainWindow *w) {
 w->vivod_na_ekran(10);
}
..........
one(this)
 
Да, с указателем, сработало. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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