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

288
25 мая 2022, 03:50

привет у меня проблема когда я хочу спользовать метод 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

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

Answer 1

Поле метки 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 Вы будете вызывать этот метод с необходимыми данными

Answer 2

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

void ImagesViewer::setTextLabel(const QString& text)
{
    ui->label->setText(text);
}
READ ALSO
Реализация быстрой сортировки C++

Реализация быстрой сортировки C++

Пытаюсь реализовать алгоритм быстрой сортировки, но что-то идет не такВроде пишу прямо по книге (Кормен), но алгоритм работает некорректно...

164
В чём измеряется размер файла?

В чём измеряется размер файла?

В доках сказано, что file_size возвращает результат в байтахИмеются в виду октеты (8 бит) или количество char-ов?

198
Что обозначает код [_=&amp;*+[]{}](){}()?

Что обозначает код [_=&*+[]{}](){}()?

Как расшифровать этот код?

255