我正在与QT合作并遇到问题。我有一个包含4个类和一个mainWindow(对话框)的项目。我的第一个问题是读取txt.file。 如果我将void fileTxt :: setContaRigheFileTxt()中的代码置于void Dialog :: on_buttonBox_clicked(QAbstractButton * Open)中,它可以完美地工作。我可以打开我的文件,打印标签,文件内容写在textEditBox中。 但正如您在下面的代码中看到的那样,在void Dialog :: on_buttonBox_clicked(QAbstractButton * Open)中我调用了setContaRigheFileTxt()函数,我无法打开我的文件(第一个错误:tr和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
答案 0 :(得分:0)
如果您想以这种方式访问ui
setContaRigheFileTxt()
成员,请将其作为参数传递给on_buttonBox_clicked()
。
或者传递标签和textedit的指针,或者在setContaRigheFileTxt()
槽内设置所有静态内容(对于标签),让void fileTxt::setContaRigheFileTxt(Ui::Dialog *ui)
返回需要在其上设置的字符串。文本编辑。
更改`setContaRigheFileTxt()的签名?到
{{1}}
将该类型的前向声明从dialog.h复制到fileTxt.h,并将dialog.cpp中的include复制到fileTxt.cpp