gtk - 清理 GTKmm 应用程序的代码

标签 gtk gtkmm

大约 6 个月前我启动了一个 GTKMM 应用程序,它已经达到了一切正常的地步,我实际上每天都在使用它。它本质上是一个数据库应用程序,可以从另一个应用程序读取数据文件、生成图形并让您轻松地对数据进行排序和查看。我喜欢它。

但是,我认为我的代码一团糟,当我今天去实现另一个功能时,我意识到我可能在某个地方走错了路。

我的主窗口 GUI 是在一个 glade 文件中定义的,所有 GUI(除了我的绘图小部件,它是一个基于 Gtk::DrawingArea 的自定义小部件)都在一个文件中。它充满了指向小部件和树存储的指针,它们都在构造函数中设置并在析构函数中删除。

整个 GUI 是一个分为不同 Pane 的主窗口,因此将所有内容都放在一个文件中是有意义的。此外,不同的 Pane 需要与其他 Pane “通信”。

我应该如何更好地组织我的代码以使其易于维护?我是否创建一个本质上是小部件集合的新类,然后将该“ super 小部件”放置在我的主窗口中(假设每个 Pane 都是一个 super 小部件)?

GTKMM 教程通常非常简约,所以我无法在那里获得太多见解。

最佳答案

我目前正在开发一个大型 GTKMM 应用程序。整个代码库遵循的一般规则是每个框架(包含小部件的集合)在其自己的 cpp 文件中都是其自己的类。然后,这些类在主函数中作为单例类实例化,每个类都公开一个 getFrame 方法。

// Single instance of this class.
SomeGUIComponent* SomeGUIComponent::m_instance = NULL;

SomeGUIComponent& SomeGUIComponent::getInstance()
{
  if (m_instance == NULL)
  {
    m_instance = new SomeGUIComponent();
  }
  return *m_instance;
}

Gtk::Frame& SomeGUIComponent::getFrame()
{
  return m_myMasterFrame;
}

所以这可以添加到更大的应用程序中:

SomeGUIComponent::getInstance().getFrame()

关于gtk - 清理 GTKmm 应用程序的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858345/

相关文章:

c - GLib-关键 ** : Source ID XXX was not found when attempting to remove it

user-interface - 如何删除 GTK 中条目和 TextView 中插入的表情符号?

c++ - 使用 cookie 的完整路径创建 SoupCookieJarText

python - 在 gtk 中控制按钮/框的大小

c++ - 检索 Gtk::Widget 的相对位置:get_allocation() 不起作用

gtk - 在 gtk 中绘制背景图像 - 我的尝试均无效

linux - 确保您的 Linux 和 GTK 应用程序支持国际化和本地化的最佳方法?

c++ - 带有GTK +/gtkmm网格的分屏

c++ - gtkmm header 中的冲突声明

c++ - 在 Gtk::ToggleToolButton 上处理 "clicked"加速器 (gtkmm)