- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 GtkTemplate,但它真的很烦人,无法正常工作。我已经定义了 .ui 文件资源,正确调用它等。
这是我的文件:
介子.build:
# project name and programming language
project('myproject', 'vala', 'c', version: '1.0.0')
# add resources to the executeable
gnome = import('gnome')
gresources = gnome.compile_resources(
meson.project_name() + '.resources',
'data/gresources.xml',
c_name: 'resources'
)
executable(
meson.project_name(),
'src/OpenFileWindow.vala',
'src/Main.vala',
gresources,
dependencies: [
dependency('gtk+-3.0'),
dependency('gio-2.0'),
],
install: true
)
using Gtk;
namespace MyProject {
[GtkTemplate (ui="/ui/OpenFileWindow.ui")]
public class OpenFileWindow : Window {
[GtkChild]
Button btn_browse;
public OpenFileWindow() {
}
[GtkCallback]
private void btn_browse_clicked(Button btn) {
stdout.printf("CLICKED");
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="OpenFileWindow" parent="GtkWindow">
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="btn_browse">
<property name="label">gtk-open</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<property name="image_position">top</property>
<property name="always_show_image">True</property>
<signal name="clicked" handler="myproject_openfilewindow_btn_browse_clicked" swapped="no"/>
</object>
</child>
</template>
</interface>
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/">
<file preprocess="xml-stripblanks">ui/OpenFileWindow.ui</file>
</gresource>
</gresources>
valac -C --debug --debug --pkg gio-2.0 --pkg gtk+-3.0 --color=always --directory myproject@exe --basedir ../ --gresources=../data/gresources.xml ../src/OpenFileWindow.vala ../src/Main.vala
../src/OpenFileWindow.vala:6.5-6.40: error: UI resource not found: `/ui/OpenFileWindow.ui'. Please make sure to specify the proper GResources xml files with --gresources and alternative search locations with --gresourcesdir.
public class OpenFileWindow : Window {
最佳答案
GResource是一个只读文件系统,用于已嵌入到已编译二进制文件中的文件。在 Vala GUI 项目中,这可用于在二进制文件中存储图像、图标等。
GtkBuilder也可以嵌入 UI 定义文件,Vala 还通过 [GtkTemplate]
对此提供了额外支持。 , [GtkChild]
和 [GtkCallback]
属性。此支持的一部分包括编译时的类型检查。检查需要获取源文件并计算出 GResource 内存文件系统的文件名,这就是项目失败的地方。任何想要改进它的人都应该修补 codegen/valagtkmodule.vala在 Vala 编译器中。但是,目前,为了让您的项目正常工作,您需要为资源使用更扁平的文件结构。
先动data/gresource.xml
到 ui/
目录。然后更改prefix
至 /ui
.这意味着内存文件系统将使用与 GtkTemplate
匹配的名称。您在 Vala 代码中使用的属性。同时删除 ui/
从文件名给出一个平面目录结构:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/ui/">
<file preprocess="xml-stripblanks">OpenFileWindow.ui</file>
</gresource>
</gresources>
gresources
的定义在
meson.build
文件:
gresources = gnome.compile_resources(
meson.project_name() + '.resources',
'ui/gresources.xml',
source_dir: ['ui']
)
source_dir
保持引用在扁平目录结构中工作。
[GtkCallback]
没有信号。 .这是一个名称解析问题,您只需更改
OpenFileWindow.ui
中的一行即可。文件来自:
<signal name="clicked" handler="myproject_openfilewindow_btn_browse_clicked" swapped="no"/>
<signal name="clicked" handler="btn_browse_clicked" swapped="no"/>
resources/
├── components/
│ └── zoom-bar.ui
├── icons/
│ └── project.svg
├── layouts/
│ └── main-window.ui
├── themes/
│ ├── dark.css
│ └── light.css
└── filelist.gresource.xml
filelist.gresource.xml
文件需要一个
prefix
的
/
,但子目录从源文件复制到内存文件:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/">
<file preprocess="xml-stripblanks" compressed="true">layouts/main-window.ui</file>
<file preprocess="xml-stripblanks" compressed="true">components/zoom-bar.ui</file>
</gresource>
</gresources>
[GtkTemplate (ui="/layouts/main-window.ui")]
source_dir
gnome.compile_resources()
的论据在
meson.build
仍然需要设置:
gresources = gnome.compile_resources(
'project-resources',
'resources/filelist.gresource.xml',
source_dir: ['resources']
)
关于gtk - Vala GtkTemplate : UI Resource not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60987956/
如何在 Vala 中创建周期性任务? Vala 中是否有可以在指定时间段调用预定方法的计时器类?如果是,请提供示例代码。 更新: 这是基于答案和评论的示例代码: public class Sample
有没有人尝试在Vala中编写pidgin或libpurple插件?快速浏览Vala homepage似乎是一种很棒的语言,并且是学习Vala的好机会,但是同时学习Vala和pidgin插件的精湛技巧有
Vala 有函数静态变量吗? 我所说的“函数静态变量”是指在函数内部声明的变量,它在调用之间保持其值,如以下 C 示例所示: #include void foo() { int a = 10
在 Java 中你可以有这样的东西 class MyClass { ... 在 C# 中 class MyClass where E : A { ... Vala 中有类似的东西吗? 最佳答案 不,V
Vala Tutorial提到了内置数组的以下方法和属性(和运算符): arr.length arr += element arr.resize() arr.move() (“内置数组”是指像 int
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
在 Vala 的默认应用程序中打开文件的最佳方式是什么? 有点像xdg-open作品。 最佳答案 我在另一个应用程序中找到了一些现有的代码,但后来我也发现了这个GLib.AppInfo.launch_
在 Vala 中,我看到当我声明一个数组时我必须指定类型,比如 int[] myarray = { 1, 2, 3 }; 我想知道是否有一种方法可以像这样混合数组 smtg[] myarray = {
我想在我的应用程序中使用颜色选择器对话框 - https://github.com/satya164/gtk-theme-config 我在 vala 中找不到关于 ColorChooserDialo
我是瓦拉的新手。我对 GObject 不熟悉。据我了解,GObject 是从 GNOME 的 GLib 项目中分离出来的。如果我错了请纠正我。 我确实非常喜欢 Vala 的语法和实现,但我无意为 GN
假设我有一个 C 代码 (dcomplex.h): typedef double dcomplex[2]; 并且想在vala中使用这样的数据类型。 最小的 vapi 文件和 vala 调用是什么? (
我正在尝试使用 Vala 创建一个使用 Glib.Settings 的应用程序。如果架构或键不存在,我不希望我的应用程序崩溃。我已经明白我无法捕获其中的错误( How to handle errors
我正在为 LAME 编码器构建一个前端,以便在 Gtk/Vala 中进行概念验证。 我已经安装了 libmp3lame-dev 并希望使用一些给定的编码参数对 WAV 文件进行简单编码,并使用 Gtk
我正在使用 HashMap。当我遍历 map 时,数据以(通常是相同的)随机顺序返回。但是数据是按特定顺序插入的,我需要保留插入顺序。我怎样才能在 Vala 中做到这一点?在 Java 中有 Link
我在 Vala 应用程序中使用 Glib.Settings。我想确保即使模式或 key 不可用,我的程序也能正常工作。所以我添加了一个 try/catch 块,但是如果我使用不存在的 key ,程序就
在 Linux 中,我在 Gnome Builder (3.26.4) 中使用 Meson (0.44.0) 作为控制台程序,该程序将使用 Gee 和 GXml。我的意图是在 Genie 中写这个。
我刚刚运行了这段代码,它对我来说看起来是不错的语言。 但是当我在 NetBeans IDE 中尝试时,我没有看到任何 Vala,也没有看到任何自动完成可用性。 知道如何让 NetBeans IDE 支
将此库与 Vala 一起使用: http://valadoc.org/#!api=glib-2.0/GLib.DateTime GLib.DateTime now = new GLib.Dat
我正在 win32 上使用 Vala 开发小型命令行实用程序。使用 vala 编译的程序依赖于以下 DLL libgobject-2.0-0.dll libgthread-2.0-0.dll libg
我想使用模拟对象编写单元测试,例如 Moq或 NSubstitute对于 C#。 有人可以推荐一个与 Vala 一起使用的模拟库吗? 最佳答案 由于 Vala 生成 C 代码(使用 GObject 库
我是一名优秀的程序员,十分优秀!