我正在尝试使用带有gobject内省的pygi创建到vala库的python绑定.但是,我在生成GIR文件时遇到了问题(我计划随后将其编译为typelib文件).根据文档,valac应该支持生成GIR文件.
编译以下内容
helloworld.vala
public struct Point {
public double x;
public double y;
}
public class Person {
public int age = 32;
public Person(int age) {
this.age = age;
}
}
public int main() {
var p = Point() { x=0.0, y=0.1 };
stdout.printf("%f %f\n", p.x, p.y);
var per = new Person(22);
stdout.printf("%d\n", per.age);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用命令
valac helloworld.vala --gir=Hello-1.0.gir
Run Code Online (Sandbox Code Playgroud)
不像Hello-1.0.gir人们期望的那样创建文件.如何生成gir文件?
我正在尝试使用glade/gtk/vala创建一个简单的应用程序.到目前为止我有这个:
using Gtk;
class HelloWorldApp : GLib.Object {
const string UI = "test.glade";
public Window main_window;
[CCode (instance_pos = -1)]
public void on_btn_hello_clicked(Button source) {
stdout.printf("Hello, world");
}
construct {
Builder builder = new Builder();
builder.add_from_file(UI);
main_window = builder.get_object("window1") as Window;
main_window.destroy.connect(Gtk.main_quit);
builder.connect_signals(this);
}
}
class HelloWorld : GLib.Object {
public static int main(string[] args) {
Gtk.init (ref args);
HelloWorldApp h = new HelloWorldApp();
h.main_window.show_all();
Gtk.main();
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时输出:(helloworld:22641):Gtk-WARNING**:无法找到信号处理程序'on_btn_hello_clicked'但是除了未被调用的处理程序之外还运行良好
我究竟做错了什么?
解析C++的问题是众所周知的.它不能纯粹基于语法进行解析,它不能像LALR那样完成(无论术语是什么,我不是语言理论家),语言规范是一个很多页面等等.由于这个和其他原因我为我的个人项目决定另一种语言.
Vala看起来很好.虽然提供了许多比C++更多的改进,但解析起来同样麻烦吗?或者它有一个整洁,合理的长度形式语法,或一些逻辑描述,适合构建编译器,源分析器和其他工具的解析器?
无论答案是什么,Genie替代语法都是如此?
(我也很想知道D和其他后C++非VM语言不太强烈.)
Vala语言编译器可以处理非常不同的语法Genie,可以说它可以被认为是一种语言的不同语言或替代语法.AFIK,你可以在Vala做的任何事情,你可以写Genie(忽略正在进行的细节,错误)让任何不喜欢花括号的人高兴.
是否有一些语言或替代语法与Genie与Vala的标准C++具有相同的关系?它应该允许做任何可能在C++中做的事情.(它不需要普通的C++编译器可读,但是 - 我不希望在这个时间点.)
(附带问题:Genie/Vala是我现在能想到的唯一例子.还有其他例子吗?)
我在Vala应用程序中有一个窗口,里面有一个图像.这个图像有时会被更改img.set_from_pixbuf(imgdata);,因此它的大小也会发生变化.它嵌入在Gtk.Box中.
box = new Gtk.Box(Orientation.VERTICAL,5);
...
box.pack_end(img,false,false);
Run Code Online (Sandbox Code Playgroud)
因此,如果以前有一个大图像,我用一个较小的图像替换它,窗口仍然是非常大的,我没有找到一种方法动态缩小到所需的空间.我试过window.set_default_size(box.width_request,box.height_request)但它总是返回-1.
那么任何想法如何调整窗口大小?谢谢!
我需要显示一个几乎无限的滚动式交互式小部件列表,并在添加新数据或用户滚动到未缓存区域时根据需要添加/删除它们.
TreeView(如此处所述)是没有选项的,因为我需要完整的Widgets作为项目(由具有多个动作等的标准小部件组成,但CellRenderer不适用于此)
更糟糕的是,我不提前知道我的小部件的高度(虽然没有太大的差异),因此使用VBox可能会导致跳跃.
使用滚动条仍应感觉好像名单是有限的(即只更新后滚动完成,因此scrollbutton不跳从你的鼠标移开),并调整窗口的大小和窗口的布局时被更新,滚动位置不应该改变太多(焦点小部件应该保持原样,除非焦点小部件被滚动掉......).
最好的方法是什么?甚至可能只是在需要添加新窗口小部件时向我发送信号的库?
或者可以强迫ListView以一种不太讨厌的方式做到这一点?(即在屏幕外缓冲区上绘图,使用CellRenderer将其复制到单元格中,将鼠标/键盘事件转发到实际的窗口小部件?)
我找到了关于这个主题的零文档(我是否在错误的地方搜索过?对我来说这似乎很奇怪).
我只需要能够为我的Vala应用程序使用Qt GUI.一个例子将不胜感激.
我正在考虑使用Vala开发应用程序.我想为我的代码编写单元测试 - 但我还没有(至今)找到任何积极维护的Vala单元测试框架(例如Valadate).
任何人都可以推荐与Vala一起使用的单元测试框架吗?
另外,考虑到Vala的相对"新颖性",Vala可以被认为是生产就绪 - Vala中是否有任何已知的企业应用程序?
我使用以下命令编译了一个vala程序:
valac test.vala
Run Code Online (Sandbox Code Playgroud)
当然我可以在我的计算机上运行该程序,但是当我尝试在另一个上运行.exe文件时,我收到以下错误:
libglib-***.dll is missing on this computer
Run Code Online (Sandbox Code Playgroud)
这是我的源代码的样子:
using GLib;
int main(string[] args)
{
bool running = true;
while(running)
{
print("Hello World\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误非常清楚,但我能对付它吗?提前致谢.