网格中的GTKMM按钮 刚刚学会了GTKMM的概念,发现我喜欢这个,与C++相比,这是相当无聊的,只是在终端编程。当我决定创建一个代码来创建一个8 x 8按钮的表格时,我遇到了一个问题,那就是如何将每个按钮设置到我想要的位置,因为我创建的代码只是水平生成64个按钮。有人能帮我吗?谢谢

网格中的GTKMM按钮 刚刚学会了GTKMM的概念,发现我喜欢这个,与C++相比,这是相当无聊的,只是在终端编程。当我决定创建一个代码来创建一个8 x 8按钮的表格时,我遇到了一个问题,那就是如何将每个按钮设置到我想要的位置,因为我创建的代码只是水平生成64个按钮。有人能帮我吗?谢谢,c++,gtkmm,C++,Gtkmm,h(类属性和方法的代码) \ifndef GTKMM\u示例窗口\u H #定义GTKMM_示例窗口 #包括 类示例窗口:公共Gtk::窗口 { 公众: 示例窗口(); 虚拟~ExampleWindow(); 私人: //信号处理程序: 按钮编号无效(常量Glib::ustring&data); //子窗口小部件: Gtk::网格m_网格; Gtk::按钮[8][8]; }; #endif/*GTKMM\u示例窗口*/ examplewindow.cc(用于修改属性和方法的代码) #包括 #包

h(类属性和方法的代码)

\ifndef GTKMM\u示例窗口\u H
#定义GTKMM_示例窗口
#包括
类示例窗口:公共Gtk::窗口
{
公众:
示例窗口();
虚拟~ExampleWindow();
私人:
//信号处理程序:
按钮编号无效(常量Glib::ustring&data);
//子窗口小部件:
Gtk::网格m_网格;
Gtk::按钮[8][8];
};
#endif/*GTKMM\u示例窗口*/
examplewindow.cc(用于修改属性和方法的代码)

#包括
#包括“examplewindow.h”
ExampleWindow::ExampleWindow()
{
设定头衔(“桑德曼先生”);
设置边框宽度(12);
int i,j;
添加(m_网格);
对于(int i=0;i<8;i++)
{
对于(int j=0;j<8;j++)
{
m_grid.add(按钮[i][j]);
}
}
对于(int i=0;i<8;i++)
{
对于(j=0;j<8;j++)
{
按钮[i][j]。已单击信号()。连接(
sigc::bind(sigc::mem_-fun(*这个,
&示例窗口::在按钮上(编号),“按钮1”);
}
}
m_grid.show_all();
}
ExampleWindow::~ExampleWindow()
{
}
无效的
示例窗口::打开按钮编号(常量Glib::ustring和数据)
{

std::cout而不是使用
m\u网格。添加()
尝试使用
attach()
attach\u next\u to()

因此,您可以给出循环中的行/列位置,或者将按钮9连接到按钮1下方,将按钮2连接到按钮1右侧

#ifndef GTKMM_EXAMPLEWINDOW_H
#define GTKMM_EXAMPLEWINDOW_H

#include <gtkmm.h>

class ExampleWindow : public Gtk::Window
{
public:
  ExampleWindow();
  virtual ~ExampleWindow();

private:
  // Signal handlers:
  void on_button_numbered(const Glib::ustring& data);

  // Child widgets:
  Gtk::Grid m_grid;
  Gtk::Button button[8][8];
};

#endif /* GTKMM_EXAMPLEWINDOW_H */
#include <iostream>
#include "examplewindow.h"

ExampleWindow::ExampleWindow()
{
  set_title("Mr. Sandman");
  set_border_width(12);
  int i, j;
  add(m_grid);
  for (int i = 0; i < 8; i++)
  {
      for (int j = 0; j < 8; j++)
      {
          m_grid.add(button[i][j]);
      }
  }

  for (int i = 0; i < 8; i++)
  {
      for (j = 0; j < 8; j++)
      {
          button[i][j].signal_clicked().connect(
    sigc::bind<Glib::ustring>( sigc::mem_fun(*this,
      &ExampleWindow::on_button_numbered), "button 1") );
      }
  }
  m_grid.show_all();
}

ExampleWindow::~ExampleWindow()
{
}


void
ExampleWindow::on_button_numbered(const Glib::ustring& data)
{
  std::cout << data << " was pressed" << std::endl;
}
#include "examplewindow.h"
#include <gtkmm/application.h>

int main(int argc, char *argv[])
{
  Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");

  ExampleWindow window;

  // Shows the window and returns when it is closed.
  return app->run(window);
}