- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图在设置 Gtkmm 后弹出一个对话框,如下所示:
MainWindow::MainWindow() : public Gtk::Window { //etc etc
在 main() 中
Gtk::Main ginit(argc,argv);
MainWindow *mw = new MainWindow; // delcared as extern in header as well for the dialog
ginit.run(*mw);
当必要的事件被触发时,下面的代码应该运行,但是失败了。这很奇怪,因为关于 http://library.gnome.org/devel/gtkmm-tutorial/2.21/sec-dialogs-filechooserdialog.html.en 的例子完美编译运行。
Gtk::FileChooserDialog *dlg = new Gtk::FileChooserDialog(Glib::ustring("choose destination"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
dlg->set_transient_for(*mw);
dlg->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
dlg->add_button(Glib::ustring("Select"), Gtk::RESPONSE_OK);
dlg->show_all_children();
int response =dlg->run();
根据 GDB,这一切都在 dlg->run() 上失败;为了让它更有趣,它给了我两个错误之一:
(PCollab:4583): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
(PCollab:4583): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `-g-type-private--GTypeFlags'
(PCollab:4583): GLib-GObject-CRITICAL **: g_signal_emit_valist: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(PCollab:4583): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(PCollab:4583): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
(PCollab:4583): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `(null)'
(PCollab:4583): GLib-GObject-CRITICAL **: g_signal_emit_valist: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(PCollab:4583): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed PCollab: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
所以我想通了,然后跑了
sudo xhost +
它有一些魔力,允许同一个程序两次连接到 X11(或者我在无所不知的互联网上读到的)这有一些效果,但不是我想要的。因为现在它给了我一些更神秘的东西:
../../src/xcb_io.c: process_responses: Assertion `(((long) (dpy->last_request_read) - (long)(dpy->request)) <= 0)' failed.
我假设第一个错误意味着 mw 不指向 Gtk::Window 因为它不被 gtk 视为对象,但事实仍然是 mw 在我的屏幕上完美无误地显示时我运行 Gtk::Main ginit(*mw);由于我什至不知道这是什么意思,我希望一些 Gtk/X11 大师可以指出正确的方向来修复我的代码。
其他细节,我正在运行带有 gcc 4.4.5 和 gtkmm 2.4 的 Ubuntu Linux (amd64)
最佳答案
MainWindow::MainWindow() : public Gtk::Window { //etc etc
这看起来有点奇怪,你是想在定义而不是声明中继承吗?还是只是打字错误?
(新)教程(针对 gtkmm 3)中的示例代码现在如下所示。
#include <gtkmm.h>
class ExampleWindow : public Gtk::Window
{
public:
ExampleWindow();
virtual ~ExampleWindow();
protected:
//Signal handlers:
void on_button_file_clicked();
void on_button_folder_clicked();
//Child widgets:
Gtk::VButtonBox m_ButtonBox;
Gtk::Button m_Button_File, m_Button_Folder;
};
您是否尝试过在堆栈而不是堆上分配变量?喜欢
Gtk::FileChooserDialog dialog("Please choose a folder",
Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
dialog.set_transient_for(*this);
//Add response buttons the the dialog:
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
dialog.add_button("Select", Gtk::RESPONSE_OK);
int result = dialog.run();
而不是 new
和指针?
关于c++ - 运行 Gtkmm 对话框失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306724/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我正在尝试使用 Gtkmm for C++、cairo::context、gdk::pixbuf 在窗口上绘图。我注意到对于某些宽度(在我的示例中为 298),我得到一些水平黑线(与白色条纹交替)而不
我刚刚从 gtkmm 2.4 更新了我的项目,我将在其中添加一个工具栏并通过以下方式将其更改为垂直: 工具栏.set_orientation(); 在 gtkmm 3.2 中,此功能不存在,我在“gt
我正在使用 Debian 8 并安装了 libgtkmm-3.0(以及 -dev)。现在我有一个使用 gtkmm 的非常简单的程序,基本上是一个 Hello World: 主要.cpp: #inclu
我需要将一个键盘按键事件附加到继承自 DrawingArea 的 Canvas。 我已经在构造函数中的“add_events()”上添加了这些事件,但运行后按键事件没有响应,出了什么问题? Canva
我希望在 Gtk::DrawableArea 上使用 mouseevents 画一条线。我想要的是这样的: 点击线路按钮激活线路事件 选择绘图区域中的第一个点(已绘制) 现在选择绘图区域中的第二个点(
操作系统:Debian 9.1 编译器:gcc(Debian 6.3.0-18) GTK+ 版本:3.22.11-1 Gtkmm 版本:3.22.0-1 大家好,我一直在用 Gtkmm 3.22.0-
我只是想知道小部件的大小。如果小部件的尺寸大于屏幕,我需要此信息将 ScrolledWindow 设置为最大尺寸。 但是我所知道的所有函数都给出一个常量值 1。 #include #include
我正在尝试使用 C++ 制作 GTK3 应用程序。因为它是我的第一个 gtkmm 应用程序而且它真的很小,所以我避免使用构建器并使用纯代码放置小部件。 我有这样的标题栏菜单按钮片段: Gtk::Men
在 gtkmm 中是否有防止窗口移动的好方法? 起初我尝试通过重载 on_configure_event(强行将窗口移动到固定位置)来做到这一点,但这导致了一些奇怪的图形故障和调整窗口大小时的巨大减速
我正在尝试编译 Gtkmm 书中的简单示例。我使用的代码在 simple.cc 文件中 #include int main(int argc, char *argv[]) { auto app =
我可以连接到什么事件来检测用户在窗口中时按下的箭头键。 到目前为止,我已尝试通过 on_key_press_event 进行连接,并检查了 keyval、hardware_keycode 和 stat
我必须创建一个简单的应用程序,在系统托盘中显示一个图标和一个菜单,您可以从中执行一些操作。问题是状态图标在创建后立即关闭。少了什么东西?我放置 sleep 以确保它已创建。系统托盘中出现了 3 秒钟的
我正在尝试用 gtkmm 编写程序,但按钮不会显示。我已尽我所能使这些按钮显示出来,但没有任何效果。我什至在主文件和 win_home.cpp 文件中都包含了“显示所有”方法,但仍然没有任何反应。然而
我试图在单击按钮时更改按钮的背景颜色。我已经很好地将按钮连接到点击方法,但我似乎无法找到正确的 c++ 语法来创建它。我已经看到它是用 python 完成的,但这并不能完全帮助我。有人有教程或知道语法
因为我正在编写一个在面对其他配置时表现完全不同的“通用”应用程序,所以我被迫显示 gtk 窗口,即使我在启动时还不知道它们。可能还需要同时显示多个窗口(不是模态对话框,而是独立窗口)。但是,如果可以在
你好 stackoverflow:),我正在编译一个基本的 gui 程序,它对 2 个 double 值求和并将它们打印出来。我的代码其实很简单,我先贴出我用命令行编译的3个文件 "g++ main.
我正在寻找一种暂停应用程序执行的方法,它不会被卡住,并且当用户按下按钮时,它会立即继续它暂停时正在做的任何事情。 我找不到任何关于此或如何将执行暂停一定时间的文档。有人可以帮我解决这个问题吗? 最佳答
我有以下问题:我创建了一个提示用户进行一些输入的程序。这是使用派生的 Gtk::Dialog 完成的,其用法如下: if (modal_dialog->run() == SUCCESS){ //
我没有代码错误,我只是到处看了看,不知道该怎么做。我想获得 Gtk::widget 的颜色,即 Gtk::label。我可以像这样覆盖标签的颜色: l.override_color( c, l.get
我是一名优秀的程序员,十分优秀!