Gtk微调器不出现

问题描述 投票:0回答:3

我正在尝试在计算进行中显示Gtk :: Spinner对象,但似乎什么也没有发生。代码片段看起来像...

{
    Gtk::Spinner spinner;
    spinner.start (); 
    // do some work...
    spinner.stop ();
}

我曾以为微调器需要知道它出现在哪个对话框中,但是我看不到将其输入对象的任何方法。有谁知道我在哪里可以找到可行的例子?我可以在许多地方找到Gtk文档,但这并没有太大帮助。

gtk gtkmm
3个回答
1
投票

要将鼠标光标更改为“忙”,您可以执行以下操作:

Glib::RefPtr<Gdk::Window> window = dialog.get_window();
if(window) {
    window->set_cursor(Gdk::Cursor(Gdk::WATCH));
    Gdk::flush();
}

要改回来,做

window->set_cursor();

代替。

免责声明:我通常在C语言中使用GTK,并且已经在运行中进行了翻译...


2
投票

您打过电话

spinner.show ();

并将其添加到某些窗口?

此外,您的计算可能会阻止UI,因此不会更新。致电

while (Gtk::Main::events_pending ())
    Gtk::Main::iteration ();

有一段时间。


0
投票

简而言之,如果Gtk :: Spinner未出现在屏幕上,这是一个快速检查清单:

  1. 确保已安装librsvg
  2. 检查您当前活动的Gtk主题是否具有基本名称为“ process-working-symbolic”的图像文件(例如/ path / to / your / theme / icons / scalable-up-to-32 /状态/process-working-symbolic.svg)。
  3. 在您的应用程序代码中:确保将微调器对象添加到某些父窗口小部件/容器:vbox.pack_start(spinner, Gtk::PACK_SHRINK);
  4. 在您的应用程序代码中:确保实际上使所有小部件都可见:show_all_children();
  5. 在您的应用程序代码中:最后,您需要调用spinner.start()才能使小部件实际出现并在屏幕上旋转。

详细:

实际的Gtk微调器窗口小部件代码(请参见gtkspinner.c]中的函数gtk_spinner_class_init())本身并不进行任何绘制。实际上,它的代码很少。它所做的只是向gtk小部件添加CSS代码:

  • CSS类“ spinner”分配给小部件
  • 并且只要widget's
  • 布尔值[[gtk属性“ active”更改,它就会自动添加和删除CSS伪类checked”。所以实际外观(图标)和动画是由您当前主题的CSS文件定义的。例如。在Gtk的默认主题的

    gtk-contained.css

文件中,您会找到以下内容:spinner { background: none; opacity: 0; -gtk-icon-source: -gtk-icontheme("process-working-symbolic"); };
这意味着它将自动在

主题的“图标”目录树]]中搜索基本名称为“ process-working-symbolic

”的适当图像文件。实际的旋转动画是通过以下方式在同一CSS文件中定义的:
spinner:checked { opacity: 1; animation: spin 1s linear infinite; };
在大多数其他主题中,微调器小部件的这些CSS代码部分几乎相同。

现在这是一个普遍的问题:在大多数主题中,微调器图像是SVG文件(例如,通常为“

process-working-symbolic.svg

”),但是库存的Gdk pixbuf加载程序不支持SVG格式。它们支持多种其他图像文件格式,但是要实际允许Gdk / Gtk加载.svg文件,您需要安装能够执行此操作的第三方pixbuf加载程序,例如librsvg。替代:

如果您不能或不想麻烦地安装像

librsvg

这样的具有SVG功能的Gdk pixbuf加载程序,那么您也可以简单地添加具有相同基本名称但以另一种文件格式的图像文件例如主题主题的图标目录树中的“ process-working-symbolic.png”。因此,请绘制或下载一些微调图片,然后对其进行缩放,然后将其放置几次以达到主题的“ icons”目录中列出的分辨率,例如:]/THEMEDIR/icons/8x8/status/process-working-symbolic.png /THEMEDIR/icons/16x16/status/process-working-symbolic.png /THEMEDIR/icons/22x22/status/process-working-symbolic.png /THEMEDIR/icons/24x24/status/process-working-symbolic.png /THEMEDIR/icons/32x32/status/process-working-symbolic.png /THEMEDIR/icons/64x64/status/process-working-symbolic.png /THEMEDIR/icons/256x256/status/process-working-symbolic.png /THEMEDIR/icons/512x512/status/process-working-symbolic.png
另外,您应该知道:每当您执行spinner.start()时,微调器图标都会立即出现在屏幕上,但是即使在像样的机器上,微调器通常也要花费一秒钟的时间才能开始播放其动画。
© www.soinside.com 2019 - 2024. All rights reserved.