Gtk旋转器未出现

Gtk旋转器未出现,gtk,gtkmm,Gtk,Gtkmm,我试图在计算过程中显示Gtk::Spinner对象,但似乎什么都没有发生。这段代码看起来像 { Gtk::Spinner spinner; spinner.start (); // do some work... spinner.stop (); } 我原以为旋转器需要知道它出现在哪个对话中,但我看不到任何方式将其输入到对象中。有人知道我在哪里可以找到一个有效的例子吗?我可以在很多地方找到Gtk文档,但这帮不了什么忙。你打电话来了吗 spinner.show

我试图在计算过程中显示Gtk::Spinner对象,但似乎什么都没有发生。这段代码看起来像

{
    Gtk::Spinner spinner;
    spinner.start (); 
    // do some work...
    spinner.stop ();
}
我原以为旋转器需要知道它出现在哪个对话中,但我看不到任何方式将其输入到对象中。有人知道我在哪里可以找到一个有效的例子吗?我可以在很多地方找到Gtk文档,但这帮不了什么忙。

你打电话来了吗

spinner.show ();
并将其添加到某个窗口

此外,您的计算可能会阻塞UI,因此不会对其进行更新。召唤

while (Gtk::Main::events_pending ())
    Gtk::Main::iteration ();
偶尔有一次。

你打过电话吗

spinner.show ();
并将其添加到某个窗口

此外,您的计算可能会阻塞UI,因此不会对其进行更新。召唤

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

偶尔。

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

Glib::RefPtr<Gdk::Window> window = dialog.get_window();
if(window) {
    window->set_cursor(Gdk::Cursor(Gdk::WATCH));
    Gdk::flush();
}
spinner {
  background: none;
  opacity: 0;
  -gtk-icon-source: -gtk-icontheme("process-working-symbolic");
};
相反


免责声明:我通常在C语言中使用GTK,并已动态地将其翻译…

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

Glib::RefPtr<Gdk::Window> window = dialog.get_window();
if(window) {
    window->set_cursor(Gdk::Cursor(Gdk::WATCH));
    Gdk::flush();
}
spinner {
  background: none;
  opacity: 0;
  -gtk-icon-source: -gtk-icontheme("process-working-symbolic");
};
相反


免责声明:我通常在C语言中使用GTK,并已即时翻译了此内容…

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

  • 确保安装了librsvg
  • 检查当前活动的Gtk主题是否具有基本名称为“处理工作符号”的图像文件(例如/path/to/your/theme/icons/scalable-up-to-32/status/process-working-symbol.svg
  • 在应用程序代码中:确保已将微调器对象添加到某个父窗口小部件/容器:
    vbox.pack_start(微调器,Gtk::pack_SHRINK)
  • 在应用程序代码中:确保所有小部件都是可见的:
    show_all_children()
  • 在应用程序代码中:最后,您需要调用
    spinner.start()
    ,小部件才能真正出现并在屏幕上旋转
  • 详细内容:

    实际的Gtk spinner小部件代码(参见gtkspinner.c中的函数)本身并没有进行任何绘图。事实上,它的代码很少。它所做的只是向gtk小部件添加CSS代码:

    • 它将CSS类“微调器”分配给小部件
    • 小部件的布尔gtk属性更改时,活动,它会自动添加和删除CSS伪类
    因此,实际外观(图标)和动画由当前主题的CSS文件定义。例如,在Gtk的默认主题的Gtk contained.css文件中,您可以找到以下内容:

    Glib::RefPtr<Gdk::Window> window = dialog.get_window();
    if(window) {
        window->set_cursor(Gdk::Cursor(Gdk::WATCH));
        Gdk::flush();
    }
    
    spinner {
      background: none;
      opacity: 0;
      -gtk-icon-source: -gtk-icontheme("process-working-symbolic");
    };
    
    这意味着它将在主题的“icons”目录树中自动搜索基本名称为“process working symbolic”的适当图像文件。实际旋转动画在同一CSS文件中定义如下:

    spinner:checked {
      opacity: 1;
      animation: spin 1s linear infinite;
    };
    
    在大多数其他主题中,spinner小部件的这些CSS代码部分几乎完全相同

    现在这是一个常见问题:在大多数主题中,微调器图像是一个SVG文件(例如,通常为“process working symbol.SVG”),但库存Gdk pixbuf加载程序根本不支持SVG格式。它们支持多种其他图像文件格式,但要真正允许Gdk/Gtk加载.svg文件,需要安装第三方pixbuf加载程序,如librsvg

    备选方案:

    如果您不能或不想费心安装支持SVG的Gdk pixbuf加载程序,如librsvg,那么您也可以简单地将具有相同基本名称但采用另一种文件格式(如“process working symbol.png”的图像文件添加到主题的图标目录树中。因此,可以绘制或下载一些微调器图片,然后将其缩放并放置几次,使其达到主题的“图标”目录中列出的分辨率,例如:

    /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()
    操作,微调器图标都会立即出现在屏幕上,但即使是在一台像样的机器上,通常也需要大约一秒钟的时间,微调器才会开始动画。

    简而言之,如果Gtk::spinner没有出现在屏幕上,这里有一个快速检查表:

  • 确保安装了librsvg
  • 检查当前活动的Gtk主题是否具有基本名称为“处理工作符号”的图像文件(例如/path/to/your/theme/icons/scalable-up-to-32/status/process-working-symbol.svg
  • 在应用程序代码中:确保已将微调器对象添加到某个父窗口小部件/容器:
    vbox.pack_start(微调器,Gtk::pack_SHRINK)
  • 在应用程序代码中:确保所有小部件都是可见的:
    show_all_children()
  • 在应用程序代码中:最后,您需要调用
    spinner.start()
    ,小部件才能真正出现并在屏幕上旋转
  • 详细内容:

    实际的Gtk spinner小部件代码(参见gtkspinner.c中的函数)本身并没有进行任何绘图。事实上,它的代码很少。它所做的只是向gtk小部件添加CSS代码:

    • 它将CSS类“微调器”分配给小部件
    • 小部件的布尔gtk属性更改时,活动,它会自动添加和删除CSS伪类
    因此,实际外观(图标)和动画由当前主题的CSS文件定义。例如,在Gtk的默认主题的Gtk contained.css文件中,您可以找到以下内容:

    Glib::RefPtr<Gdk::Window> window = dialog.get_window();
    if(window) {
        window->set_cursor(Gdk::Cursor(Gdk::WATCH));
        Gdk::flush();
    }
    
    spinner {
      background: none;
      opacity: 0;
      -gtk-icon-source: -gtk-icontheme("process-working-symbolic");
    };
    
    这意味着它将在主题的“icons”目录树中自动搜索基本名称为“process working symbolic”的适当图像文件。实际旋转动画在同一CSS文件中定义如下:

    spinner:checked {
      opacity: 1;
      animation: spin 1s linear infinite;
    };
    
    在大多数其他主题中,这些CSS代码部分