QTで作業していて問題があります。私は4つのクラスとmainWindow(ダイアログ)を持つプロジェクトを持っています。私の最初の問題はtxt.fileを読むことです。 void fileTxt :: setContaRigheFileTxt()内のconteinedコードをvoid Dialog :: on_buttonBox_clicked(QAbstractButton * Open)に入れると、完全に機能します。ファイルを開くことができ、ラベルが印刷され、ファイルの内容がtextEditBoxに書き込まれます。 次のコードで見られるように、void Dialog :: on_buttonBox_clicked(QAbstractButton * Open)私はsetContaRigheFileTxt()関数を呼び出してファイルを開くことができません(最初のエラー:trとuiはこのスコープで宣言されませんでした)QT C++別のクラスからMainWindow UIにアクセスするにはどうすればいいですか
main.cppに
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <fileTxt.h>
#include <string>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
/* APRE FILE ROF .txt DA CONVERTIRE */
void Dialog::on_buttonBox_clicked(QAbstractButton *Open)
{
fileTxt _fileTxt;
/* FROM
_fileTxt.setContaRigheFileTxt(); // apre il file .txt per contare le righe
TO */
_fileTxt.setContaRigheFileTxt(ui); // apre il file .txt per contare le righe
}
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QMainWindow>
#include <QAbstractButton>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_buttonBox_clicked(QAbstractButton *Open);
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
fileTxt.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include "fileTxt.h"
#include <QTextStream>
#include <QLabel>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QObject>
/* COSTRUTTORE - CREA FILE .TXT */
fileTxt::fileTxt()
{
}
/* DISTRUTTORE */
fileTxt::~fileTxt()
{
}
/* CONTARIGHE FILE .TXT */
/* FROM
void fileTxt::setContaRigheFileTxt()
TO */
void fileTxt::setContaRigheFileTxt(Ui::Dialog *ui)
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Apri File"), "C:\\Users\\Massimo Di Natale\\Documents\\Programmi C++ 11\\Programmi_QT\\Ericsson", tr("File ROF (R*.txt)"));
if (!fileName.isEmpty()) // se non è vuoto
{
QFile file(fileName); // se è vuoto
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::critical(this, tr("Errore"), tr("Non posso aprire questo file"));
return;
} // end if
/* ETICHETTE: CONTROLLO BYZ/CORREZIONE COORDINATE */
QFont f("Arial", 12); // imposta il font
ui->label_3->setFont(f);
ui->label_4->setFont(f);
ui->label_5->setFont(f);
ui->label_6->setFont(f);
ui->label_3->setAlignment(Qt::AlignCenter); // imposta l'allineamento
ui->label_4->setAlignment(Qt::AlignCenter);
ui->label_5->setAlignment(Qt::AlignCenter);
ui->label_6->setAlignment(Qt::AlignCenter);
ui->label_3->setText("Controllo che le BYZ richieste siano inserite nel DataBase...");
ui->label_4->setText("e");
ui->label_5->setText("correzione coordinate");
ui->label_6->setText("in corso...");
QTextStream in(&file); // legge il file .txt
ui->textEdit->setText(in.readAll()); // lo stampa nella textEdit
file.close(); // chiude il file aperto per la lettura
}
fileTxt.h
#ifndef FILETXT_H
#define FILETXT_H
#include <string>
/* ADD */
#include "dialog.h"
#include "ui_dialog.h"
class fileTxt
{
public:
fileTxt();
virtual ~fileTxt();
/* FROM
void setContaRigheFileTxt();
TO */
void setContaRigheFileTxt(Ui::Dialog *ui);
protected:
private:
};
#endif // FILETXT_H
私の英語はあまり良くないので、他のポストの答えも私を助けてくれません(コードも完全ではないので理解できません) –