2016-10-08 57 views
-1

Я ищу работу с QT и имею проблему. У меня есть проект с 4 классами и mainWindow (диалог). Моя первая проблема заключается в чтении txt.file. Если я поместил код, заключенный в void fileTxt :: setContaRigheFileTxt() в void Dialog :: on_buttonBox_clicked (QAbstractButton * Open), он отлично работает. Я могу открыть файл, ярлыки напечатаны, а содержимое файла записано в текстовом поле. Но как вы можете видеть в следующем коде, в void Dialog :: on_buttonBox_clicked (QAbstractButton * Open), я вызвал функцию setContaRigheFileTxt(), и я не могу открыть файл (первая ошибка: tr и ui не были объявлены в этой области)QT C++ Как я могу получить доступ к пользовательскому интерфейсу MainWindow из другого класса

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

К сожалению, я очень новый в C++ и QT, а также мой английский не так хорош, поэтому ответ в другом посте мне тоже не помогает (также код не является полным, поэтому его очень сложно понять) –

ответ

0

Если вы хотите получить доступ к Dialog «s ui элемент таким образом, передать его в качестве аргумента setContaRigheFileTxt().

В качестве альтернативы передать указатели на этикетках и TextEdit или установить все статическое содержимое (для наклеек) внутри слота on_buttonBox_clicked() и пусть setContaRigheFileTxt() возвращает строку, которая должна быть установлена ​​на TextEdit.

Изменить подпись `setContaRigheFileTxt()? в

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

Копия прямой декларации такого типа от dialog.h к fileTxt.h, и включают в себя от dialog.cpp ти fileTxt.cpp

+0

Спасибо, Кевин, но это меня не очень помогает. Я googled, как передать член ui в качестве аргумента другой функции, но ничего. Можете ли вы изменить код для меня? Большое спасибо –

+0

@ Kevin Я пытаюсь передать ui в качестве члена setContaRigheFileTxt(): 1) в 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' –

Смежные вопросы