Gtkmm 3.0:如何在DrawingArea的on_draw方法中获取用户类数据
Gtkmm 3.0: How to get user class data in on_draw method of DrawingArea
在我的第一个Gtkmm 3.0程序中,我在程序结构和从DrawingArea类访问我的类数据方面遇到了麻烦。
基于gnome网站的演示程序("绘制细线"),我有一个窗口类,一个drawingArea类和一个带有用户数据的Board类。
drawingArea对象被定义为window类中的成员变量。在窗口类构造函数中,我实例化了一个Board对象。
现在我想在drawingArea类的on_draw例程中访问Board成员变量。最好的方法是什么?
我的board class有:
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;
您可能不应该将顶层窗口与绘图区域耦合,否则您无法在应用程序的其他窗口中重用绘图代码,例如,首选项更改示例板的外观。
相反,在DrawingArea的构造函数中传递Board引用或指针。这里是窗口的构造函数,其中DrawingArea接受Board引用。如果你认为DrawingArea并不总是与一个Board相关联,你可以使用指针和setBoard()来代替:ExampleWindow(const char * fn, const vector<int>& t) : bdw(t), m_Area(bdw) {
...
}
添加指向ExampleWindow
的指针到MyArea
的定义,稍后可以在MyArea
构造函数中初始化。这样您就可以访问ExampleWindow的公共接口。您可以创建公共getter来允许外部用户(MyArea
)访问字段。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 类draw()方法在直接调用时有效,但在被另一个对象调用时崩溃
- 如何传递参数到draw()方法- FLTK