LINUX.ORG.RU

Проблемы с Label и Text Edit в QT Creator

 


0

1

Возникает проблема с изменением поля Label в приложении. Есть простая функция:

void MainWindow::actionsFunc(enCurAction curSignal)
{
   if(curSignal == None)
   {
      ui->curActionLabel->setText("нет");
      qDebug() << curSignal;
   }
   if(curSignal == Wait)
   {
      ui->curActionLabel->setText("жду ответа от серверов");
      qDebug() << curSignal;
   }
}

Как вы поняли занимается она тем что меняет текстовое поле в зависимости от вводимого параметра. Находится она в классе mainwindow. Суть проблемы в том, что если я вызываю эту функцию из mainwindow то все работает корректно. Но если я вызываю из другого класса, то текст не изменятся. Сама функция вызывается и параметры передаются нормально (проверенно с помощью qDebug), а вот текст в поле Label никак не хочет меняться. Та же проблема с полем Text Edit, там не работает функция append (если вызывать по такой же схеме). Пробовал как прямые вызовы функций, так и конструкцию сигналы/слоты. В чем может быть проблема?


Доставь минимально компилируемый пример, демонстрирующий эту проблему.

P.S. А вообще из другого класса (наверняка у тебя в этом классе реализована логика) вызывать этот метод и не нужно. Просто генерируй сигнал, который будет вызывать слот, меняющий текст в зависимости от параметра.

EXL ★★★★★
()

ui->curActionLabel->setText(«нет»);

не надо работать с русским текстом напрямую. надо в tr() оборачивать и потом перевод подключать.

MikeDM ★★★★★
()
Ответ на: комментарий от grondek

Пример

Класс MainWindow:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

void MainWindow::SetLable(const QString text)
{
    ui->label->setText((QString)text);
}

MainWindow::~MainWindow()
{
    delete ui;
}

Класс SecondClass:

#include "secondclass.h"
#include "mainwindow.h"
#include <QDebug>

SecondClass::SecondClass()
{
    MainWindow w;
    w.SetLable((QString)"text");
    qDebug() << "constr";
}

void SecondClass::Send(QString text)
{
    qDebug() << "2 " << text;
    MainWindow w;
    w.SetLable(text);
}

Класс Main:

#include "mainwindow.h"
#include "secondclass.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

В конструкторе(зачем далеко ходить) SecondClass вызывается функция SetLable из MainWindow но с полем label нечего не происходит. Поле изменяется только если вызывать эту функцию из класса MainWindow и Main (тоже генерируется автоматически), из любого другого не получается.

Condis
() автор топика
Ответ на: комментарий от MikeDM

Ни с каким текстом не получается, даже с цифрами. Как будто строка

label->setText("text")
вообще игнорируется.

Condis
() автор топика
Ответ на: Пример от Condis

У вас два даже три.

MainWindow w;
MainWindow w;
MainWindow w;

Естественно ничего не будет отображаться. Учите C++. И тут ИМХО, лучше всего использовать сигналы и слоты.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: Пример от Condis

Вот это жесть кто ж так преобразует-то?

w.SetLable((QString)"text");

Qt, конечно, шарит данные в классах, но лучше передавать константную ссылку.

void MainWindow::SetLable(const QString text)

Ну и в SecondClass объекты w создаются и сразу уничтожаются.

Читай доки Qt-шные и смотри примеры - там все хорошо описано.

grondek
()
Ответ на: комментарий от EXL

Спасибо, кажется начало доходить о чем вы говорите. Через сигналы/слоты пробовал, но судя по всему не правильно, что бы вызвать сигнал создавал отдельный экземпляр класса. Не подскажете как вызвать сигнал из другого класса?

Condis
() автор топика
Ответ на: комментарий от grondek

На счет первой строки, просто забыл стереть, это уже от безысходности, думал может с типами данных проблемы. А на счет второго, как тогда можно получить указатель на оригинальный объект?

Condis
() автор топика
Ответ на: комментарий от Condis
void MainWindow::SetLable(const QString &text)

Попробуй для начала собрать примеры из Qt и разобраться в них, там много всего, начиная с базовых вещей.

grondek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.