更改框内图像的问题 FLTK
Posted
技术标签:
【中文标题】更改框内图像的问题 FLTK【英文标题】:Problem with changing image inside the box FLTK 【发布时间】:2021-07-07 18:54:45 【问题描述】:我在更改 Fl_Box 中的图像时遇到问题(Fl_PNG_image size 25x25[enter image description here][1])。
所以这里是改变盒子的代码部分:
if(strcmp(payload, "heat")==0) tryb_pracy_box->image(grzanie_png);
if(strcmp(payload, "cool")==0) tryb_pracy_box->image(chlodzenie_png);
tryb_pracy_box->redraw();
然后我有一个
Fl::check();
但是当我尝试更改图像时,结果如下所示: [1][1]:https://i.stack.imgur.com/xb7by.png
据我了解,图像“出现”在标签上,但是当我尝试使用不同的对齐方式时,它没有帮助。
这是我正在使用的图片 [2][2]:https://i.stack.imgur.com/h0GVz.png [3][3]:https://i.stack.imgur.com/OS2bC.png
提前致谢!
【问题讨论】:
【参考方案1】:此处描述的此类效果通常是由具有“无背景”的小部件引起的,即框类型 FL_NO_BOX 或 FL_*_FRAME 类型之一。如果您更改图像或标签(假设它们在框内),则更改的标签/图像会覆盖现有标签。在这种情况下,您有两种选择:
-
重绘父widget,将
tryb_pracy_box->redraw();
改为tryb_pracy_box->parent()->redraw();
将框类型更改为具有纯色背景的框类型,例如FL_FLAT_BOX。
如果标签(和图像)在小部件之外,则在更改标签时肯定需要绘制父小部件。
【讨论】:
【参考方案2】:我发现子类化 Fl_Box 并实现(覆盖)draw 方法更容易。在其中你可以调用 fl_draw_image(...) 和 fl_draw(const char *, ...)。这允许您在图像上精确指定文本的坐标,而无需调整相对于图像的对齐方式。您可以在您的类中存储一个图像指针并更改它所指向的内容。
【讨论】:
以上是关于更改框内图像的问题 FLTK的主要内容,如果未能解决你的问题,请参考以下文章