0

在我的第一个 Gtkmm 3.0 程序中,我遇到了程序结构和从 DrawingArea 类访问我的类数据的问题。

基于来自 gnome 网站的演示程序(“绘制细线”),我有一个窗口类、一个绘图区域类和一个带有用户数据的 Board 类。

一个drawingArea 对象被定义为windows 类中的一个成员变量。在窗口类构造函数中,我实例化了一个 Board 对象。

现在我想访问drawingArea 类的on_draw 例程中的Board 成员变量。最好的方法是什么?

我的董事会课程有:

class Board {
public:
   int sqPix;       

我的窗口类有:

Board &ExampleWindow::getBd()   { return bdw; }
void  ExampleWindow::setBd(Board b) {bdw = b; }
ExampleWindow::ExampleWindow(char * fn, vector<int>& t)
{
  Board bd = Board(t);
  setBd(bd);

我的窗口类 .h 文件有:

 class ExampleWindow : public Gtk::Window
{
public:
  ExampleWindow();
  ExampleWindow(char * fn, std::vector<int>& t);
  virtual ~ExampleWindow();
  Board &getBd();
  void  setBd(Board b);
private:
  Board bdw;
  MyArea m_Area;

在我的绘图区课程中,我想做类似的事情:

bool MyArea::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
  Gtk::Allocation allocation = get_allocation();
  =====> int sqPix = ExampleWindow::getBd().sqPix;  
4

2 回答 2

0

您可能不应该将顶级窗口与绘图区域耦合,否则您无法在应用程序的其他窗口中重用绘图代码,例如更改示例板外观的首选项。

相反,在其构造函数中传递一个 Board 引用或指向您的 DrawingArea 的指针。这是窗口的构造函数,其中 DrawingArea 采用 Board 引用。如果您认为 DrawingArea 并不总是与一个 Board 相关联,则可以使用指针和 setBoard():

ExampleWindow(const char * fn, const vector<int>& t) : bdw(t), m_Area(bdw) {
  ...
}
于 2013-04-13T19:26:31.697 回答
0

添加指向定义的指针,稍后您可以在构造函数中对其ExampleWindow进行初始化。这样您就可以访问 ExampleWindow 的公共接口。您可以创建公共 getter 以允许外部用户 ( ) 访问字段。MyAreaMyAreaMyArea

于 2013-04-13T18:57:23.147 回答