【问题标题】:How can I dynamically name widget variables in gtkmm3?如何在 gtkmm3 中动态命名小部件变量?
【发布时间】:2018-12-31 12:10:44
【问题描述】:

我正在尝试创建 10 个 Gtk::Buttons 而不去

Gtk::Button *button1 = new Gtk::Button;
Gtk::Button *button2 = new Gtk::Button;
Gtk::Button *button3 = new Gtk::Button;
...
Gtk::Button *button10 = new Gtk::Button;

grid.add(*button1); grid.add(*button2); grid.add(*button3); //...

一个Qt但类似的问题是here

我试过Qt example,但它有文件名,我不知道它是干什么用的。

对于字符串数组(带有“button1”、“button2”、“button3”的列表)循环会在这里产生指针错误

grid.add(*button1)
         ^_______

我需要做的是为按钮的变量生成动态命名,然后执行

grid.add(*button1);
grid.add(*button2);
grid.add(*button3);
...
grid.add(*button4);

【问题讨论】:

  • 我没有投反对票,但是您的问题看起来更面向 GTK,并且没有足够的上下文让大多数人知道您在问什么。尝试一个最小、完整且可验证的示例,并展示您尝试回答问题的内容。通常在这个过程中你解决了自己的问题。
  • 好的,但我确实放了 Gtkmm 标签,让我添加并向您展示我所做的代码
  • 我不太清楚问题出在哪里或您在问什么。你能说清楚一点吗?
  • 再一次,你太含糊了。 “生成”如何?什么是“东西”?你说“之间”,但只说出一件事——“之间”是指在两件事之内。而在明确了你的目标之后,你仍然需要清楚地解释问题是什么!那么,你想发生什么,发生了什么,以及你为什么这么认为。
  • 我猜你想要做的是自动生成代码,将你的变量命名为account1account2等。不要那样做。使用数组或向量。

标签: c++ string widget instantiation gtkmm3


【解决方案1】:

为了让我的问题更清楚,我最终从不同的人那里收集信息并将其合并到以下内容中

main.cpp

#include <gtkmm.h>
#include <map>
#include <string>

int main(int argc, char *argv[])
{
  auto app =
    Gtk::Application::create(argc, argv,
      "org.gtkmm.dynamic.buttons");

  Gtk::Window window;Gtk::Grid grid;
  window.set_default_size(600, 600);
  std::string name = "button";
  std::map<std::string, Gtk::Button*> all_buttons;
  for (int i = 1; i <= 10; i++)
  {
    Gtk::Button *button = new Gtk::Button("Button " + std::to_string(i));
    all_buttons[name] = button;
    grid.add(*button);
  }
  window.add(grid);
  window.show_all_children();

  return app->run(window);
}

感谢ptomato & Peter87

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2011-06-29
    • 1970-01-01
    • 2010-10-20
    • 2020-12-31
    • 1970-01-01
    • 2011-08-18
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多