将 Glib::RefPtr<T> 转换为 Gtk::Widget 和需要
Conversion or cast of Glib::RefPtr<T> to Gtk::Widget& needed
我很难将Glib::RefPtr转换为GtkWidget,其中T源自Widget:
#include <gtkmm/drawingarea.h>
#include <gtkmm/application.h>
#include <gtkmm/window.h>
#include <gtkmm/fixed.h>
class MyPic : public Gtk::DrawingArea {
public:
};
int main(int argc, char* argv[]) {
Gtk::Fixed f;
Gtk::DrawingArea da; // this works.
Gtk::DrawingArea mp; // this works.
Glib::RefPtr<MyPic> rp_mp; // this not.
f.put(da, 10, 20);
f.put(mp, 10, 30);
f.put(rp_mp, 10, 40); // Line # 19
}
这不会编译:
joerg> g++ x.cpp `pkg-config --cflags --libs gtkmm-3.0`
x.cpp: In function ‘int main(int, char**)’:
x.cpp:19:24: error: no matching function for call to ‘Gtk::Fixed::put(Glib::RefPtr<MyPic>&, int, int)’
x.cpp:19:24: note: candidate is:
/usr/include/gtkmm-3.0/gtkmm/fixed.h:123:8: note: void Gtk::Fixed::put(Gtk::Widget&, int, int)
/usr/include/gtkmm-3.0/gtkmm/fixed.h:123:8: note: no known conversion for argument 1 from ‘Glib::RefPtr<MyPic>’ to ‘Gtk::Widget&’
joerg> g++ --version
g++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3版权所有(C)2011自由软件基金会,股份有限公司。这是免费软件;有关复制条件,请参见来源。没有担保甚至不考虑适销性或特定用途的适用性。
Glib::RefPtr是一个智能指针,DrawingArea是从Widget派生的,所以这应该可以工作。
取消引用(如f.put(*rp_mp,...)
)是故意不起作用的。文档指出:"*与大多数其他智能指针不同,RefPtr不支持通过*object_ptr.*取消引用。">
如何获得小工具&来自SmartPtr?
尽管我怀疑您可以根据需要进行设计,但您可以按如下方式取消引用例如Glib::RefPtr foo
:
some_method_needing_a_reference(*foo.operator->())
相关文章:
- 如何在运行中期切换GTK CSS style_context
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 如何使用 GTK 3 正确设置默认文本
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 是否可以编译 Gtk+ 应用程序以同时在 Gtk 2 和 3 上运行
- GTK 最大化表单 C++
- GTK:完全摆脱系统主题/CSS
- Widget&&rhs 是左值还是右值引用
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 如何从 Gtk::窗口调用派生对象的析构函数
- 使用静态 qmake 的 QT Widget 插件
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- GTK 3 C++按钮中带有标签的图标
- Gtkmm:创建一个Gtk::ComboBox,其中列出Gtk::DrawingArea
- 用GTK创建逻辑门模拟器,如何制作放置区域
- 从 QT Widget 对象实例访问 QT Widget 子成员
- 将 Glib::RefPtr<T> 转换为 Gtk::Widget 和需要
- 如何将 gtk+ 中的 'GtkWidget' 类型转换为 gtkmm 中的 'Gtk::Widget' 类型?
- Gtk::Widget on_enter_notify当鼠标关闭时