FLTK Fl_Box无法更改其图像()

时间:2018-04-22 06:10:31

标签: fltk nvidia-jetson

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

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()创建并使用setTristate()更新的Fl_Box-es本身位于Fl_Pack中。无奈之下,我在分配之前尝试在wanted图像上调用uncache(),但这并没有帮助。

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

系统是在Jetson TX2上运行的Ubuntu 16.04。我使用的是FLTK 1.3.4。我无法更新到任何更新的东西,因为这是我运行的硬件上发布的最新NVIDIA(&#34; JetPack 3.2&#34;)。 在本机连接的显示器上,由板载NVIDIA驱动程序驱动,以及使用不同的DISPLAY在网络上运行时,都会出现问题。

1 个答案:

答案 0 :(得分:0)

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

.git只会使窗口小部件的框无效,而不会使其标签区域无效。

因为我没有在redraw()的通话中设置FL_ALIGN_INSIDE,标签和图片最终都在标签区域之外,但我没有注意到,因为没有&#39;在窗口中与这些东西对齐。

align()添加到FL_ALIGN_INSIDE的调用中解决了问题。而且,更一般地说,请记住align()如果标签位于小部件之外,则不会使小部件的标签区域无效。