2017-06-08 2 views
0

Im mit GTK3, um etwas zu erstellen. In Tutorials gibt esMuss gtk_init Funktion aufrufen, aber nicht von der Hauptfunktion - C++

#include <gtk/gtk.h> 
int main(int argc, char* argv[]) 
{ 
    GtkWidget *window; 
    gtk_init(&argc, &argv); 

gtk_window, gtk_container etc... 

Ich möchte MainProgram erstellen, die die Zeichnungen außerhalb dieser Hauptfunktion behandelt werden. Also lösche ich den obigen Code und machen ein neues Geschäft:

main.cpp

#include "MainProgram.h" 
int main(int argc, char* argv[]) 
{ 
    MainProgram mainProgram; 
    mainProgram.run(); // the magic is now happening inside this run method 

MainProgram.h

#include <gtk/gtk.h> 
#include "MainProgram.h" 
class MainProgram 
{ 
public: 
    MainProgram(); 
    ~MainProgram(); 

    void run(); 

    void initSystems(); 
...other not so important code goes inside 

schließlich die MainProgram.cpp

#include "MainProgram.h" 

MainProgram::MainProgram() 
{ 
... 
} 

MainProgram::~MainProgram(){} 


void MainProgram::run() 
{ 
// about that magic we were talking about 
    initSystems(); 
} 

void MainProgram::initSystems(){ 

    gtk_init(&argc, &argv); // here it is. 

    _window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER); 
    gtk_window_set_default_size(GTK_WINDOW(_window), _screenWidth, _screenHeigth); 
    gtk_window_set_title(GTK_WINDOW(_window), "Fill & stroke"); 
    // ************** FIX OF THE PROBLEM 
    gtk_widget_show_all(_window); // DIDNT CALL 
    gtk_main();     // These two functions 
} 

Jetzt wenn ich versuche, das Programm zu kompilieren mit:

g++ main.cpp MainProgram.cpp `pkg-config --cflags --libs gtk+-3.0` 

erhalte ich die folgende Warnung:

MainProgram.cpp: In member function ‘void MainProgram::initSystems()’: 
MainProgram.cpp:22:12: error: ‘argc’ was not declared in this scope 
    gtk_init(&argc, &argv); 
      ^
MainProgram.cpp:22:19: error: ‘argv’ was not declared in this scope 
    gtk_init(&argc, &argv); 

Gibt es eine einfache Möglichkeit, diese Adressen von Hauptfunktion von main.cpp innerhalb dieses passieren? Ich mache dies, um meinen Code sauberer zu machen und zu versuchen, die main.cpp Datei nicht zu überladen :)

+0

Sie müssen 'argc' und' argv' vollständig durch 'MainSystem()' übergeben. Oder übergeben Sie einfach 'NULL' für beide Argumente; Alles, was es tut, ist, GTK + auf seine eigenen Befehlszeilenargumente überprüfen zu lassen, und wenn Sie nicht beabsichtigen, die GLib-API dafür zu verwenden, wird es einfach Dinge ruinieren. Wie auch immer, die Wahl liegt bei Ihnen. Wenn Sie nicht verstehen, was dies bedeutet, müssen Sie C++ lernen, bevor Sie GTK + lernen können. – andlabs

+0

@andlabs Was ist MainSystem()? Kannst du mir das sagen? –

+0

Das war ein Tippfehler; Ich meinte 'initSystem()'. – andlabs

Antwort

0

Ich habe vergessen, zwei Funktionen zu setzen, um meine App anzuzeigen, können Sie in MainProgram.cpp Datei sehen, machte ich Markierungen. Die letzten paar Zeilen in dieser 'Datei'.

Verwandte Themen