gpt4 book ai didi

c++ - 创建大量 Gtk 小部件而不是在方法中传递上下文是否更好?

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:55 26 4
gpt4 key购买 nike

我是 GTK/GTK++ 的新手,我来自 MFC,所以我知道我有几个坏习惯需要改掉 ;)

我想知道在 Gtk::DrawingArea 中绘制 UI block 的最佳方式是什么(如“最有效”) .这些 block 可以在绘图区的任何位置绘制(我不能使用堆栈或表格)。

现在我创建了一个类 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...
}
}

我想知道这个解决方案是否好,或者简单地导出我的 UIBlock 是否更容易和更有效来自 Gtk::Widget 的类(class).

希望我清楚我的问题 ;)谢谢!

编辑:正如我在 drahnr 的回答评论中所说,GooCanvas 不是一个选项,因为它是 not developed anymore。 .下一代 Canvas API 是 Clutter,但它在 GTK 中的集成是 still being worked on .

所以我现在将继续使用我自制的 Cairo 解决方案。但我仍然需要知道是否有好的做法可以在 Canvas 上显示大量矩形和文本。这是一个screenshot我现在得到的东西,但是当我有几十万个矩形时,它有点慢......

最佳答案

您正在重新实现 GooCanvas(除非您有未提及的进一步限制)- 它有一个 GooCanvasItem 可以容纳常规 GtkWidget (称为 GooCanvasWidget)。

https://wiki.gnome.org/action/show/Projects/GooCanvas?action=show&redirect=GooCanvas

关于c++ - 创建大量 Gtk 小部件而不是在方法中传递上下文是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com