2016-10-08 8 views
-1

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 
+0

私の英語はあまり良くないので、他のポストの答えも私を助けてくれません(コードも完全ではないので理解できません) –

答えて

0

あなたがそのようにDialoguiメンバーにアクセスする場合は、setContaRigheFileTxt()の引数として渡します。

また、on_buttonBox_clicked()スロット内のラベルと静的コンテンツ(ラベル用)をすべて設定し、setContaRigheFileTxt()に設定する必要がある文字列を返すようにしてください。

`setContaRigheFileTxt()のシグネチャを変更しますか?

void fileTxt::setContaRigheFileTxt(Ui::Dialog *ui) 

にコピーdialog.hからfileTxt.hにそのタイプの前方宣言、およびdialog.cppのTIから含まfileTxt.cpp

残念ながら、私はC++とQTで非常に新しいですし、また
+0

ありがとうKevinしかし、これはあまり助けになりません。私は、別の関数に引数としてuiメンバを渡す方法を探せましたが、何もありませんでした。あなたは私のコードを変更できますか?ありがとうございました –

+0

@ Kevin私はsetContaRigheFileTxt()にメンバーとしてuiを渡そうとしています:1)in dialog.cpp _fileTxt.setContaRigheFileTxt(ui); 2)dialog.hのプライベート:Ui :: Dialog * ui;十分ですか? 3)fileTxt.cpp&fileTxt.h void fileTxt :: setContaRigheFileTxt(_ui)_uiはどのような型ですか?文字列Qwidget ???? –

+0

'ui'は' Ui :: Dialog * '型です、あなたの' dialog.h'を参照してください –

関連する問題