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 :)
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
@andlabs Was ist MainSystem()? Kannst du mir das sagen? –
Das war ein Tippfehler; Ich meinte 'initSystem()'. – andlabs