нету метода Label в qt

привет у меня проблема когда я хочу спользовать метод label в классе то его нету но в файле .ui я его добавлял я пытался очищать проект и пересобирать не получилось и когда я хочу получить доступ к методу label у меня его нету вот еще

Image = new ImagesViewer(this);
Image->(здесь должен быть метод label но его нету а в .ui есть виджет label)

файл mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtGui>
#include <QtCore>
#include <QFileDialog>

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

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


void MainWindow::on_actionAdd_triggered()
{
   mFileName = "";
   ui->textEdit->setPlainText("the file was created you can write");
}

void MainWindow::on_actionOpen_triggered()
{
   QString oFile = QFileDialog::getOpenFileName(this,"Open a file");

   if(!oFile.isEmpty())
     {
       QFile oFile2(oFile);
       if(oFile2.open(QFile::ReadOnly | QFile::Text))
         {
           mFileName = oFile;
           QTextStream in(&oFile2);
           QString text = in.readAll();
           oFile2.close();

           ui->textEdit->setPlainText(text);
         }
     }
}

void MainWindow::on_actionSave_triggered()
{
   QFile sFile(mFileName);
   if(sFile.open(QFile::WriteOnly | QFile::Text))
     {
       QTextStream out(&sFile);

       out<< ui->textEdit->toPlainText();

       sFile.flush();
       sFile.close();
     }
}

void MainWindow::on_actionSave_As_triggered()
{
   QString sFile = QFileDialog::getSaveFileName(this,"Save a file");

   if(!sFile.isEmpty())
     {
       on_actionSave_triggered();
     }
}

void MainWindow::on_actionundo_triggered()
{
    ui->textEdit->undo();
}

void MainWindow::on_actionRedo_triggered()
{
   ui->textEdit->redo();
}

void MainWindow::on_actionCoty_triggered()
{
   ui->textEdit->copy();
}

void MainWindow::on_actionPaste_triggered()
{
   ui->textEdit->paste();
}

void MainWindow::on_actionCut_triggered()
{
   ui->textEdit->cut();
}

void MainWindow::on_actionImages_Veiwer_triggered()
{

   QString OpenImages = QFileDialog::getOpenFileName(this,tr("Choose image"), "" ,tr("Images (*.png *.jpg *.jpeg *.bmp *.gif)") );

   if(QString::compare(OpenImages, QString()) != 0)
     {
       QImage image;
       bool valid = image.load(OpenImages);

       if(valid)
         {
          Image =  new ImagesViewer(this);
          Image->

         }
     }
}

void MainWindow::on_actionPDF_Veiwer_triggered()
{

}

void MainWindow::on_actionAudio_Player_triggered()
{

}

файл mainwidow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "imagesviewer.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

private slots:
  void on_actionAdd_triggered();

  void on_actionOpen_triggered();

  void on_actionSave_triggered();

  void on_actionSave_As_triggered();

  void on_actionundo_triggered();

  void on_actionRedo_triggered();

  void on_actionCoty_triggered();

  void on_actionPaste_triggered();

  void on_actionCut_triggered();

  void on_actionImages_Veiwer_triggered();

  void on_actionPDF_Veiwer_triggered();

  void on_actionAudio_Player_triggered();

private:
  Ui::MainWindow *ui;
  ImagesViewer *Image;

  QString mFileName;
};
#endif // MAINWINDOW_H

файл imagesviewer.cpp

#include "imagesviewer.h"
#include "ui_imagesviewer.h"

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

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

файл imageviewer.h

#ifndef IMAGESVIEWER_H
#define IMAGESVIEWER_H

#include <QDialog>

namespace Ui {
  class ImagesViewer;
}

class ImagesViewer : public QDialog
{
  Q_OBJECT

public:
  explicit ImagesViewer(QWidget *parent = nullptr);
  ~ImagesViewer();

private:
  Ui::ImagesViewer *ui;
};

#endif // IMAGESVIEWER_H

и вот скриншот файла .ui класса imagesviewer введите сюда описание изображения

извините за говнокод и тупой вопрос просто новичок


Ответы (2 шт):

Автор решения: Юрий Козлов

Поле метки label, которое Вы поместили в окно, находится не в классе ImageViewer, а в классе Ui::ImageViewer, объект которого включен в Ваш класс через поле ui

Соответственно, обращение к этому полю будет выглядеть так:

this->ui->label...

this, разумеется, можно не писать.

UPD

Как подсказал @gil9red:

  1. Имя переменной - это то имя элемента интерфейса, которое Вы видите в дизайнере.
  2. Поле ui приватное и не доступно снаружи класса ImageViewer. Есть три пути решения данной проблемы:

2.1 Сделать поле публичным. (работать будет, но это, как по мне, неправильное решение)

2.2. Сделать в классе ImageViewer метод, который будет возвращать указатель на ui(это лучше)

2.3. Сделать в классе ImageViewer метод, который будет получать то, что нужно поместить в label и выполнять всю работу с этим элементом. А из MainWindow Вы будете вызывать этот метод с необходимыми данными

→ Ссылка
Автор решения: Nyan Cat

Добавь метод для доступа к label

void ImagesViewer::setTextLabel(const QString& text)
{
    ui->label->setText(text);
}
→ Ссылка