我有一個小應用程序,我想創建一些按鈕,工具欄等,但我不想使用預先存在的GTK圖標主題,我想創建自己的。所以我尋找教程和其他東西,但事實證明,它並沒有很好地在網上討論。於是,我就做我自己的事:在Gtkmm中創建自定義IconFactory
頭文件:
#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;
};
cpp文件:
#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();
}
但現在我很堅持,因爲我真的不知道該怎麼稱呼這是我創建的新圖標。我也不知道上面的代碼是否足以真正找到圖標。
我不明白你的答案,說實話。當然,如果股票圖標是我想要使用的,我不會採取所有這些麻煩。我需要用我自己的名字創建自己的股票。這是一個特殊用途的應用程序,其中流行的圖標集不符合需要。 –
所以你想用你自己的「open」,「close」圖標來替換Gnome的「open」,「close」等圖標嗎?或者您想創建自己的圖標,例如「floop」和「greeble」代表您的應用程序中的操作? – ptomato
後者:)我想我忘了提及,我正在使用GTK3。我無法使用CSS對按鈕進行樣式設計的原因是,我不在乎命名很多按鈕,只是通過股票宏和標準GTK響應創建它們。但那只是爲了測試。現在我需要創建專門的圖標,這通常不在標準圖標集中。 –