创建大量Gtk小部件比在方法中传递上下文更好吗?
Is it better to create lots of Gtk widgets instead of passing context in methods?
我对GTK/GTK++非常陌生,我来自MFC,所以我知道我有几个坏习惯需要摆脱;)
我想知道在Gtk::DrawingArea
中绘制UI块的最佳方法(如"最有效")是什么。这些块可以在绘图区域的任何位置绘制(我不能使用堆栈或表)。
现在我已经创建了一个类UIBlock
,并在其中添加了一个Draw()
方法。因此,在我的衍生版本Gtk::DrawingArea::on_draw()
中,我调用所有UIBlock::Draw()
,并将我为绘制文本创建的Cairo::RefPtr<Cairo::Context>
和Glib::RefPtr<Pango::Layout>
转移给它们。
所以我有这样的东西:
// MyDrawingArea.h
class MyDrawingArea : public Gtk::DrawingArea
{
protected:
virtual bool on_draw(Cairo::RefPtr<Cairo::Context> const& cr) override;
private:
std::vector<UIBlock> m_uiBlockList;
}
// MyDrawingArea.cpp
bool MyDrawingArea::on_draw(Cairo::RefPtr<Cairo::Context> const& cr)
{
for(UIBlock const* uiBlock : m_uiBlockList)
{
uiBlock->Draw(cr, layout); // I've got a few other parameters like a bunch
// of layouts for the different fonts I use,
// the UI block position, etc...
}
}
我想知道这个解决方案是否好,或者从Gtk::Widget
简单地派生我的UIBlock
类是否更容易和更有效。
希望我清楚我的问题;)谢谢!
编辑:正如我在drahnr回答的评论中所说,GooCanvas不是一个选择,因为它不再被开发了。新一代的画布API是Clutter,但它在GTK中的集成仍在进行中。
所以我现在将继续使用我自制的Cairo溶液。但我仍然需要知道是否有良好的实践显示大量的矩形和文本在画布上。这是我现在的截图,但是当我有数十万个矩形时,它有点慢…
你正在重新实现GooCanvas
(除非你有进一步的约束你没有提到)-它有一个GooCanvasItem
,可以保持常规的GtkWidget
s(称为GooCanvasWidget
)。
https://wiki.gnome.org/action/show/Projects/GooCanvas?action=show&重定向= GooCanvas
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 比使用 s.str().c_str() 更好的表达?
- 创建大量Gtk小部件比在方法中传递上下文更好吗?