【问题标题】:Need to call gtk_init function, but not from main function - C++需要调用 gtk_init 函数,但不能从主函数调用 - C++
【发布时间】:2017-06-08 02:37:46
【问题描述】:

我正在使用 GTK3 来创建一些东西。在教程中有

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

gtk_window, gtk_container etc...

我想创建 MainProgram 来处理这个 main 函数之外的绘图。于是我把上面的代码删掉了,新建一个:

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

最后是 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
}

现在当我尝试编译程序时:

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

我收到以下警告:

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);

有没有一种简单的方法可以从 main.cpp 中的 main.cpp 传递这些地址?我这样做是为了让我的代码看起来更干净,并尽量不重载 main.cpp 文件:)

【问题讨论】:

  • 您需要将argcargv 一直传递到MainSystem()。或者只为两个参数传递NULL;它所做的只是让 GTK+ 检查它自己的命令行参数集,如果你不打算为此使用 GLib API,它只会破坏事情。不管怎样,选择权在你。如果你不明白这意味着什么,你需要先学习 C++,然后才能学习 GTK+。
  • @andlabs MainSystem() 是什么?你能告诉我吗?
  • 这是一个错字;我的意思是initSystem()
  • @andlabs 好的,但是我应该在 MainProgram mainProgram(&amp;argc, &amp;argv) 中传递 &argc 和 &argv,重载构造函数并向下传递到 initSystem(),还是可以在 mainProgram.run(&amp;argc, &amp;argv) 中传递它们?跨度>

标签: c++ gtk gtkmm


【解决方案1】:

我忘了放两个函数来显示我的应用程序,你可以在 MainProgram.cpp 文件中看到,我做了标记。它在那个“文件”中的最后几行。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2014-05-29
    • 2012-02-09
    • 2019-03-18
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多