Как изменить Gtk :: Image после создания объекта при задании PixBuf

Я пытаюсь изменить Gtk::Imageполучен объект, предоставив ему pixbuf, но я не могу понять, как к этому приблизиться.

Простая настройка может быть имитирована как:

#include <gtkmm.h>
#include <iostream>

class MyImage : public Gtk::Image
{
public:
void setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf);
};

void MyImage::setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf)
{
// How can i override the existing pixbuf here?
}

void freeImagePixelData(const guint8* data)
{
delete[] data;
}
Glib::RefPtr<Gdk::Pixbuf> generateTestImage()
{
guint8 *data = new guint8[40*40*4];
for(int i=0; i<40*40*4; )
{
data[i++] = (guint8)255;    // R
data[i++] = (guint8)255;    // G
data[i++] = (guint8)0;      // B
data[i++] = (guint8)255;    // A
}

Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_data(
data, Gdk::Colorspace::COLORSPACE_RGB, true, 8, 40, 40,  40*4, sigc::ptr_fun(&freeImagePixelData));
return pixbuf;
}

int main(int argc, char** argv)
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "com.almost-university.gtkmm.image.pixbuf");

Gtk::Window window;

MyImage im1;
im1.setPixBuf(generateTestImage());
window.add(im1);

window.show_all_children();

app->run(window);

return 0;
}

(Обратите внимание, что это упрощенная версия того, что я пытаюсь выяснить, я знаю, что я должен использовать Gtk :: manage и не добавлять вещи прямо в окно без другого контейнера, это всего лишь макет) ,

Я знаю, что если бы я должен был сгенерировать изображение, используя конструктор так:

    Gtk::Image im2(generateTestImage());
window.add(im2);

тогда я бы на самом деле получил желтый квадрат.

Почему-то я отказываюсь верить, что можно использовать pixbuf только во время создания объекта. Должен быть способ как-то установить данные изображения, и я просто не могу найти нужную функцию.

1

Решение

Чтобы установить Pixbuf в Gtk::Image ты можешь использовать Gtk::Image::set(const Glib::RefPtr< Gdk::Pixbuf >& pixbuf) метод:

void MyImage::setPixBuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf)
{
set(pixbuf);
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]