привет у меня проблема когда я хочу спользовать метод 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
извините за говнокод и тупой вопрос просто новичок
Поле метки label
, которое Вы поместили в окно, находится не в классе ImageViewer
, а в классе Ui::ImageViewer
, объект которого включен в Ваш класс через поле ui
Соответственно, обращение к этому полю будет выглядеть так:
this->ui->label...
this
, разумеется, можно не писать.
UPD
Как подсказал @gil9red:
ui
приватное и не доступно снаружи класса ImageViewer
. Есть три пути решения данной проблемы:2.1 Сделать поле публичным. (работать будет, но это, как по мне, неправильное решение)
2.2. Сделать в классе ImageViewer
метод, который будет возвращать указатель на ui
(это лучше)
2.3. Сделать в классе ImageViewer
метод, который будет получать то, что нужно поместить в label
и выполнять всю работу с этим элементом. А из MainWindow
Вы будете вызывать этот метод с необходимыми данными
Добавь метод для доступа к label
void ImagesViewer::setTextLabel(const QString& text)
{
ui->label->setText(text);
}
Пытаюсь реализовать алгоритм быстрой сортировки, но что-то идет не такВроде пишу прямо по книге (Кормен), но алгоритм работает некорректно...
В доках сказано, что file_size возвращает результат в байтахИмеются в виду октеты (8 бит) или количество char-ов?