操作系统:Fedora 14
编译:g ++(GCC)4.5.1 20100924(Red Hat 4.5.1-4)
我通过yum从存储库安装了gtkmm24-devel.为了确保安装按计划进行,我决定尝试使用页面上的一个示例.
#include <gtkmm.h>
int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我跑了这个例子,嘿!它说找不到gtkmm.h,没问题,我只是忘了链接库.我通过Eclipse将/usr/include/gtkmm-2.4添加到我的库搜索中.没有bueno,g ++仍然无法找到它!
fatal error: gtkmm.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过使用#include <gtkmm-2.4/gtkmm.h>和重新编译包含gtkmm ,另一个错误!:(
/usr/include/gtkmm-2.4/gtkmm.h:87:20: fatal error: glibmm.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
谢谢阅读.
我有99%的44/100的一切工作.我有一个林间空地文件,我使用gtkbuilder来渲染它,然后它出现了.除了我的treeview liststore中的数据之外的所有内容.我注意到默认情况下树视图不可见,并且将其设置为true会使一个框出现在树视图区域中,但是我无法在树视图中显示任何列表存储项.我在glade中定义的列表存储区中有一些默认数据,我也以编程方式添加了一些,但没有显示任何内容.是否有一些可见的开/关选项我不见了?
一般来说做智能指针,如std::unique_ptr与Glib::RefPtr当另一个对象重新分配给点删除他们的对象,因为他们持有的是给定的对象(在的情况下,显然隐含的唯一指针std::unique_ptr)?
我试图将我的应用程序从linux移植到Windows,我有一个主题问题.在Linux中,这是一个盒子,只需编译它,应用程序使用良好的主题,看起来像本机.
我在MSYS2中安装了gtkmm3和gtk3,我正在用CMake构建它.这没关系,我不得不将所有dll复制到二进制目录以便能够执行它.我没有复制任何其他内容.我正在尝试创建"解压缩和执行"包.
我的问题是,该应用程序看起来不合适.它看起来并不原生.窗口周围有阴影,这在Windows10中很好,但在Windows 7中它看起来不是原生的.还缺少几个图标.
甚至gitk3-demo也以相同的方式看起来非原生(但它至少有最小化/最大化/关闭图标正确).
所以问题是:如何在Windows上实现GTK3应用程序的原生外观?或者至少是原生的窗户装饰品?
谢谢
我是一名C#程序员,大约2年前开始使用ubuntu.我想学习C或C++中的GUI编程.我不喜欢单声道,它往往会在我的系统上崩溃.我对C++有基本的了解.我从未在C工作过,但看起来很酷.我应该学习/使用哪个工具包?给每个人的Pro/Cons.谢谢!
Glib :: RefPtr允许通过' ->'但不通过' *' 解除引用.为什么是这样?
我当然可以这样做:
class Foo {};
Glib::RefPtr<Foo> fooPtr;
fooPtr.operator->();
Run Code Online (Sandbox Code Playgroud)
文档特别提到他们离开了operator*().但他们没有提供任何指导原因.
为清晰起见,编写了示例:
我已经看到它认为" 你永远不需要取消引用 "一个RefPtr,但IMO似乎是虚假的,因为任何想要与动态和堆栈分配的对象一起使用的函数都需要最低的公分母接口,即pass-by -参考.
举个例子,例如:
struct Foo
{
void print() { printf( "Success" ); }
};
void myFunc( const Foo & foo ) { foo.print(); }
int main()
{
Foo foo0;
Glib::RefPtr<Foo> foo1Ptr( new Foo );
myFunc( foo0 );
myFunc( *foo1Ptr ); // error, no operator*()
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么这个位置是由Glib团队采取的?
我在实现gtkmm应用程序的makefile时遇到了麻烦.我已经实现了一个简单的解决方案,但是,我收到以下错误:
g ++ -Wall -std = c ++ 11
pkg-config gtkmm-3.0 --cflags-c main.cppcc main.o
pkg-config gtkmm-3.0 --libs-o main/ usr/bin/ld:main.o:对符号'__gxx_personality_v0 @@ CXXABI_1.3'的未定义引用
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:添加符号时出错:命令行中缺少DSO
collect2:错误:ld返回1退出状态
:目标'main'的配方失败
make:***[main]错误1
Makefile文件:
# Compiler
CXX = g++
CXXFLAGS = -Wall -std=c++11 `pkg-config gtkmm-3.0 --cflags`
# gtkmm library flags
LDLIBS = `pkg-config gtkmm-3.0 --libs`
PROGRAM = main
SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:.cpp=.o)
DEPEND = .depend
.PHONY: clean
$(PROG): $(OBJS)
$(CXX) $^ -o $@ $(LDLIBS)
# Object file rules:
.cpp.o:
$(CXX) $(CXXFLAGS) …Run Code Online (Sandbox Code Playgroud) 我用gtkmm3用c ++编程.我想在程序中更改一些字体.我阅读了关于CssStyleProvider,gtkmm文档中的StyleContext以及gtk + documentaion的所有内容,但我无法使其工作,也找不到任何关于它的教程.我是这样想的
Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
asd2->add_provider(asd, 0); /*also tried different priorities*/
Run Code Online (Sandbox Code Playgroud)
也尝试过那样
Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gdk::Screen> screen;
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
(mainWindow.get())->get_property("screen", screen);
asd2->add_provider(screen, asd, 0); /*also tried different priorities*/
Run Code Online (Sandbox Code Playgroud)
我在运行主窗口之前尝试了这些,然后运行它但我没有运气.任何帮助表示赞赏.
我使用Eclipse,我想在其中使用gtkmm.我有以下代码:
#include <gtkmm.h>
#include <iostream>
int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
Gtk::Window mainWindow;
Gtk::Button button("Click here");
mainWindow.set_title("Eclipse/GTKmm Demo");
mainWindow.set_border_width(4);
mainWindow.set_default_size(200, 50);
mainWindow.add(button);
button.show();
Gtk::Main::run(mainWindow);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我添加pkg-config --cflags --libs gtkmm-3.0(当然有严重的口音)将Cross G ++ Compiler Miscellanous选项添加到Other标记中,并将Cross G ++ Compiler Miscellanous选项添加到Linker标记中.它不起作用!
这是编译日志:
**** Build of configuration Debug for project User Directory Changer ****
make all
Building file: ../main.cpp
Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 `pkg-config --cflags --libs gtkmm-3.0` -MMD -MP -MF"main.d" -MT"main.d" -o …Run Code Online (Sandbox Code Playgroud) 我正在使用gtkmm编写自定义小部件,但我无法让它在林间空地中工作.(小部件本身几乎没有功能;它确实有效,我希望在进入下一步之前让它在林间空地工作.)Glade找到小部件,但是当我尝试将它放在窗口中时,林间空地崩溃.
根据我在各种搜索过程中发现的提示,我将这段代码添加到主源文件中:
extern "C"
{
GType date_chooser_get_type(void)
{
return DateChooser::get_type();
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑上面的代码是不对的,但是我找不到关于这个函数应该做什么的任何gtkmm或glade文档.
<?xml version="1.0" encoding="UTF-8"?>
<glade-catalog name="gtk-date-chooser" library="libgtkdatechooser-0.1.so" language="c++">
<glade-widget-classes>
<glade-widget-class name="DateChooser" generic-name="date-chooser" title="Date Chooser" />
</glade-widget-classes>
<glade-widget-group name="date" title="Date">
<glade-widget-class-ref name="DateChooser"/>
</glade-widget-group>
</glade-catalog>
Run Code Online (Sandbox Code Playgroud)
这是我的widget源代码目录的根目录gtk-date-chooser.xml.我使用以下命令在该目录中运行glade:
GLADE_CATALOG_SEARCH_PATH=. GLADE_MODULE_SEARCH_PATH=./.libs glade
Run Code Online (Sandbox Code Playgroud)
当窗口出现时,我的窗口小部件将显示在目录中指定的特殊"日期"组中,并带有默认图标.如果我放置一个窗口,然后在窗口中选择要放置的小部件,则会发生崩溃.我在控制台上看到以下内容:
GladeUI-Message: 2 missing displayable value for GtkWidget::events
GladeUI-Message: No displayable values for property GtkTreeSelection::mode
GladeUI-Message: 1 missing displayable value for GtkCellRendererAccel::accel-mode
GladeUI-Message: 14 missing displayable value for GtkCellRendererAccel::accel-mods
(glade:23757): …Run Code Online (Sandbox Code Playgroud)