2017-01-04 3 views
0

사용자가 정보를 입력하고 추가 버튼을 클릭하여 정보를 추가하거나 완료 버튼을 클릭하여 프로세스를 완료하는 GUI 응용 프로그램을 만들고 있습니다. 프로세스 출력은 4 개의 텍스트 파일이됩니다. 그래서, 그 각각이 그 파일 중 하나를 만들어 4 개 기능 클래스를 만들었어요 : 때문에 내 초기 연구Qt로 텍스트 파일을 만드는 방법

class RequiredFilesMaker 
{ 
public: 
    RequiredFilesMaker(); 
    ~RequiredFilesMaker(); 
    void a1(float xcor, float ycor, int xnbin, int ynbin , int resolution); 
    void a2(); 
    void a3(); 
    void a4(); 
}; 

, 내가 파일에 데이터를 저장 QTextStream를 사용한다는 것을 이해합니다. 그러나이 편리한 객체를 사용하는 데 문제가 있습니다. 클래스에서 정의 할 수없고 생성자에서 초기화 할 수 없습니다. 나는 다른 사람들이 한 일을보기 위해 모든 문서와 포럼을 점검했다. 하지만, 널리 사용되는 유일한 방법은 함수 내에서 객체를 호출하고 작업을 수행 한 후 데이터 파일을 닫는 것입니다 (필자가 선호하는 파일이 아니므로 사용자가 파일을 열어서 쓰기 만하면됩니다.) 그 위에).

QFile data("output.txt"); 
if (data.open(QFile::WriteOnly | QFile::Truncate)) { 
    QTextStream out(&data); 
    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; 
    // writes "Result: 3.14  2.7  " 
} 

문제를 해결하는 방법을 알고있는 사람이 있습니까? 나는 다른 변수 안에 (MyMagic)에 모든 정보를 저장하는 새로운 아이디어를 내놓았다 그냥 같은 함수를 호출 : 나는 MyMagic의 종류에 대해 궁금하고,

void RequiredFilesMaker::a1(float b1, float b2, int b3, int b4, int b5){ 
    QFile gs_qfile("abc.dat"); 
    if (!gs_qfile.open(QIODevice::WriteOnly)){ 
     qDebug() <<"Couldn't open the file"; 
     return; 
    } 
    QDataStream out(&gs_qfile); 
    out.setVersion(QDataStream::Qt_4_7); 
    out << MyMagic; 

    gs_qfile.flush(); 
    gs_qfile.close(); 

을하지만.

답변

0

모든 클래스에서 공유되고 모든 로깅 작업을 관리하는 싱글 톤 클래스가 필요합니다.

singletonclass::getInstance()->doLog("Salam"); 
+0

일반적으로 자동으로 싱글 톤 클래스의 인스턴스를 오히려 나쁜 생각 :

class singletonclass{ public: singletonclass(){ // Opening log file and ... } static singletonclass * getInstance(){ static singletonclass * instance; if(!instance) instance = new singletonclass(); return instance; } void doLog(QString log){ // do logging } } 

당신은 글로벌 클래스 인스턴스를 제공하는 응용 프로그램에서 인스턴스 메소드를 얻을 수 있습니다. 'QCoreApplication'처럼'main()'함수에서 명시 적으로 인스턴스화하고,'instance()'getter가 사용할 수있게되면 그 인스턴스를 반환하게하고, 그렇지 않으면'nullptr'을 호출하게합니다. –

+0

@KubaOber 더 많은 쿠바를 설명해 주시겠습니까? –

관련 문제