在我的第一个Gtkmm 3.0程序中,我遇到了程序结构问题,无法从DrawingArea类访问我的类数据。
基于gnome网站的演示程序(“绘制细线”),我有一个窗口类,一个drawingArea类和一个包含用户数据的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;
答案 0 :(得分:0)
添加指向ExampleWindow
到MyArea
定义的指针,稍后您可以在MyArea
构造函数中初始化该定义。这样您就可以访问ExampleWindow的公共接口。您可以创建公共getter以允许外部用户(MyArea
)访问字段。
答案 1 :(得分:0)
您可能不应将顶级窗口与绘图区域耦合,否则您无法在应用程序的其他窗口中重复使用绘图代码,例如,更改示例板外观的首选项。
相反,在其构造函数中将Board引用或指针传递给DrawingArea。这是窗口的构造函数,其中DrawingArea采用Board引用。如果您认为DrawingArea并不总是与一个Board关联,则可以使用指针和setBoard():
ExampleWindow(const char * fn, const vector<int>& t) : bdw(t), m_Area(bdw) {
...
}