首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FLTK Fl_Box不会更改其图像()

FLTK Fl_Box不会更改其图像()
EN

Stack Overflow用户
提问于 2018-04-22 14:10:31
回答 1查看 369关注 0票数 0

我正在尝试更改在Fl_Box中显示的图像。

代码语言:javascript
运行
复制
static Fl_RGB_Image *greenRgb;
static Fl_RGB_Image *redRgb;
static Fl_RGB_Image *blackRgb;

Fl_Box *makeTristate(char const *name) {
    Fl_Box *ret = new Fl_Box(0, 0, 300, 32, name);
    ret->labelsize(24);
    ret->align(FL_ALIGN_RIGHT | FL_ALIGN_IMAGE_NEXT_TO_TEXT);
    ret->image(whiteRgb);
    return ret;
}

void setTristate(Fl_Box *tris, int state) {
    Fl_RGB_Image *wanted;
    if (state < 0) {
        wanted = redRgb;
    } else if (state > 0) {
        wanted = greenRgb;
    } else {
        wanted = blackRgb;
    }
    if (wanted != tris->image()) {
        LOG_PRINTF("changing %p (%s) from %p to %p", tris, tris->label(), tris->image(), wanted);
        tris->image(wanted);
        tris->redraw();
    }
}

图像已正确加载。无论在创建Fl_Box时首先设置的是哪个图像,它都会一直显示,即使printf()清楚地显示我将图像更改为其他一些好的图像。

这就好像redraw()实际上并没有使长方体意识到它有一个新的图像并重新绘制自己。主循环正在运行;我有另一个图像(视频捕获),我每秒重新创建(删除旧的,创建新的) 30次,并且该框/图像重新显示本身很好。

我用makeTristate()创建的Fl_Box和用setTristate()更新的Fl_Box都在Fl_Pack中。无奈之下,我试着在赋值之前调用wanted镜像上的uncache(),但这并不管用。

我做错了什么?如何将Fl_Box的图像转换为不同的图像并重新显示?

该系统是运行在Jetson TX2上的Ubuntu16.04。我使用的是FLTK 1.3.4。我不能更新到更新的版本,因为这是英伟达为我运行的硬件发布的最新版本("JetPack 3.2")。该问题既发生在由板载NVIDIA驱动程序驱动的本机连接的显示器上,也发生在使用不同显示器的网络上。

EN

回答 1

Stack Overflow用户

发布于 2018-04-23 02:05:07

所以,事实证明我忘记了导致这种情况的FLTK行为。

redraw()只会使小部件的框无效,而不会使其标签区域无效。

因为我没有在对align()的调用中设置FL_ALIGN_INSIDE,所以标签和图像最终出现在标签区域之外,但是我没有注意到,因为在窗口中没有太多东西可以排列在一起。

FL_ALIGN_INSIDE添加到对align()的调用修复了该问题。而且,更一般地,请记住,如果标签在小部件之外,redraw()不会使小部件的标签区域无效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49963086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档