首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GtkSourceView与Rust一起使用

将GtkSourceView与Rust一起使用
EN

Stack Overflow用户
提问于 2020-04-29 10:30:52
回答 1查看 175关注 0票数 2

我想在我的Rust应用程序中使用GtkSourceView。

我已经使用Glade创建了UI文件。我必须安装组件并链接它。

这是我的Rust代码:

代码语言:javascript
复制
use gtk::prelude::*;


fn main() {
    if gtk::init().is_err() {
        println!("Failed to initialize GTK.");
        return;
    }
    let glade_src = include_str!("user_interface.glade");
    let builder = gtk::Builder::new_from_string(glade_src);    
    let window: gtk::Window = builder.get_object("main_window").unwrap();

    window.show_all();

    gtk::main();
}

当我尝试cargo run时,...and我得到的错误

代码语言:javascript
复制
alex@smartalex-bed:~/.repos/codelib/rust/venom$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target/debug/venom`

(venom:10028): Gtk-ERROR **: 04:25:30.689: failed to add UI: .:17:1 Invalid object type 'GtkSourceView'
Trace/breakpoint trap (core dumped)

我找到了this并尝试将其包含在我的Cargo.toml中,但是错误仍然存在。

如何在我的Rust应用程序中使用GtkSourceView?

这是user_interface.glade

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <requires lib="gtksourceview" version="4.0"/>
  <object class="GtkWindow" id="main_window">
    <property name="can_focus">False</property>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkSourceView">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="left_margin">2</property>
            <property name="right_margin">2</property>
            <property name="monospace">True</property>
            <property name="show_line_numbers">True</property>
            <property name="show_line_marks">True</property>
            <property name="tab_width">4</property>
            <property name="auto_indent">True</property>
            <property name="insert_spaces_instead_of_tabs">True</property>
            <property name="show_right_margin">True</property>
            <property name="highlight_current_line">True</property>
            <property name="smart_backspace">True</property>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
</interface>
EN

回答 1

Stack Overflow用户

发布于 2020-04-30 04:42:59

我可以通过添加以下代码行来运行该程序:

代码语言:javascript
复制
sourceview::View::static_type();

完整的示例代码如下:

代码语言:javascript
复制
use gtk::prelude::*;

fn main() {
    if gtk::init().is_err() {
        println!("Failed to initialize GTK.");
        return;
    }

    sourceview::View::static_type();

    let glade_src = include_str!("user_interface.glade");
    let builder = gtk::Builder::new_from_string(glade_src);
    let window: gtk::Window = builder.get_object("main_window").unwrap();

    window.show_all();

    gtk::main();
}

此外,Cargo.toml还包含以下依赖关系:

代码语言:javascript
复制
[dependencies]
gtk = { version = "*", features = ["v3_22"] }
sourceview = "*"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61493245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档