1

我有一个小应用程序,我想在其中创建一些按钮、工具栏等,但我不想使用预先存在的 GTK 图标主题,我想创建自己的。所以我寻找教程之类的,但事实证明,网上讨论得并不好。所以我尝试自己做一些事情:

头文件:

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

class IconFactoryBuilder
{
public:
    IconFactoryBuilder();

    ~IconFactoryBuilder();

    void RegisterNewIcons(std::string pPath);

private:

    Glib::RefPtr<Gtk::IconFactory> mCustomFactory;
};

cp文件:

#include <IconFactoryBuilder.h>

IconFactoryBuilder::IconFactoryBuilder() {
    mCustomFactory = Gtk::IconFactory::create();
}

IconFactoryBuilder::~IconFactoryBuilder() {
}

void IconFactoryBuilder::RegisterNewIcons(std::string pPath) {

    Glib::RefPtr<Gtk::IconSet> iconSet = Gtk::IconSet::create();
    Gtk::IconSource someSource;
    try{
        Gtk::Image  *someImage=Gtk::manage(new Gtk::Image(pPath+"appbar.at.png"));
        someImage->set_pixel_size(Gtk::IconSize(48));
        someSource.set_pixbuf(someImage->get_pixbuf());
        someSource.set_size(Gtk::ICON_SIZE_DIALOG);
        someSource.set_size_wildcarded();
    }
    catch(const Glib::Exception &ex) {
        std::cerr << "An error occurred while opening the icon file!" << strerror(errno) << std::endl;
    }
    catch(...) {
        std::cerr << "Unknown Error!" << std::endl;
    }
    iconSet->add_source(someSource);
    const Gtk::StockID somestock("MyNewIcon");
    Gtk::Stock::add(Gtk::StockItem(somestock, "somelabel"));
    mCustomFactory->add(somestock, iconSet);
    mCustomFactory->add_default();
}

但是现在我很困惑,因为我真的不知道如何调用我创建的这个新图标。我也不知道上面写的代码是否足以真正找到图标。

4

1 回答 1

2

你创建了一个图标工厂...工厂

;-)

您的问题的严肃答案是您不需要Gtk::IconFactory. 不幸的是,GTK 2 文档并没有告诉您这是不必要的。您需要的是freedesktop.org 标准图标命名规范。创建您的图标,给它们起简单的名称,根据那里描述的目录结构进行组织,将其安装到适当的位置,当您创建PixbufImage使用这些...from_icon_name()功能时,您的图标将“正常工作”。(例如Gtk::Image::set_from_icon_name():)

以下是 Gnome 开发人员 wiki 中关于如何提供自己的图标的页面:http: //developer.gnome.org/integration-guide/stable/icons.html.en

这是我写的关于安装自定义图标的教程中的一个页面:http: //ptomato.name/advanced-gtk-techniques/html/desktop-file.html

于 2012-10-19T13:25:13.713 回答