QT C ++如何从其他类

时间:2016-10-08 15:27:14

标签: c++ qt class user-interface mainwindow

我正在与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

1 个答案:

答案 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