我正在Qt4中创建一些显示小部件的图形数据,我很想使用QGraphicsScene它,QGraphicsItem为数据项创建s等.
但是,我想添加一些控件层(例如滚动条,缩放+其他按钮 - 我想以类似于Google地图的方式制作它,也就是说,数据会在整个小部件上显示,并且按钮将显示在小部件的顶部.因此我认为将它们添加到场景中可能是可行的(可能作为QGraphicsGroupItem将在数据上显示的子项).但是当我调整整个小部件时,我希望它们移动和调整大小,所以我应该用它QGraphicsLayout来管理它们.但在这一点上,我发现事情非常复杂.
问题是在使用时QGraphicsLayout,以下约束条件成立:
QGraphicsWidget可以通过布局进行管理QGraphicsLayout 只能用于管理孩子 QGraphicsWidget这意味着我必须创建我的控件作为QGraphicsWidgets,QGraphicsWidget为数据小部件添加顶级,并自己管理这个顶级小部件的大小.
所以我想问:
经典方法(即,对所有控件使用普通旧窗口小部件,QGraphicsScene仅用于显示数据)是否更合理?
QGraphicsScene在这种情况下使用是否有任何优势(性能或简单性......)?
我应该如何QGraphicsScene利用它的优势?
我只是想知道,我可以将元组类型分解为Scala中的组件类型吗?
我的意思是,这样的事情
trait Container {
type Element
}
trait AssociativeContainer extends Container {
type Element <: (Unit, Unit)
def get(x : Element#First) : Element#Second
}
Run Code Online (Sandbox Code Playgroud) 当遇到断点并进入函数时,gdb版本6.8打印函数的名称,后跟函数参数.
事实恰巧,在我调试的程序中,其中一个参数值是通过引用传递的巨大记录.gdb打印变量名称,后跟其所有成员变量.它实际上需要gdb一两分钟来打印类中包含的所有成员变量...这在调试时非常烦人.
我很确定有一个设置可以禁用此行为,该设置是什么?
fork在从BEGIN块中调用Perl时,我无法理解Perl中的行为.在perlfork中,我读到了这个
BEGIN块
fork()从BEGIN块内调用时,仿真将无法完全正常工作.分叉副本将运行BEGIN块的内容,但不会在BEGIN块之后继续解析源流.例如,请考虑以下代码:Run Code Online (Sandbox Code Playgroud)BEGIN { fork and exit; # fork child and exit the parent print "inner\n"; } print "outer\n";这将打印:
Run Code Online (Sandbox Code Playgroud)inner而不是预期的:
Run Code Online (Sandbox Code Playgroud)inner outer
但是,正如我所读到的,这仅适用于fork模拟的平台.既然我关心(并测试代码)Linux,那应该不是问题,不是吗?
实际上,如果我从该文档中复制示例代码
BEGIN {
fork and exit;
print "inner\n";
}
print "outer\n";
Run Code Online (Sandbox Code Playgroud)
这就是我运行它时会发生的事情
jirka@debian:~/xpath$ perl /tmp/test.pl
jirka@debian:~/xpath$ inner
outer
Run Code Online (Sandbox Code Playgroud)
这似乎是一致的.
但是,当我删除时,exit我希望同时拥有父进程和子进程.那不符合我的预期.
这是我的新代码
BEGIN {
fork;
print "inner\n";
}
print "outer\n";
Run Code Online (Sandbox Code Playgroud)
这是奔跑
jirka@debian:~/xpath$ perl /tmp/test.pl
inner
outer
jirka@debian:~/xpath$ inner
Run Code Online (Sandbox Code Playgroud)
我期待两个 …
如果我通过调用例如打开和关闭套接字
Socket s = new Socket( ... );
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Run Code Online (Sandbox Code Playgroud)
Linux声明此套接字仍处于打开状态,或者至少是连接的文件描述符.当lsof查询此进程的打开文件时,有一个关闭连接的条目:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4 93417 can't identify protocol
Run Code Online (Sandbox Code Playgroud)
此条目将一直保留到程序关闭之前.有没有其他方法可以最终关闭套接字?我有点担心我的java应用程序可能会阻塞许多文件描述符.这可能吗?或者,即使重新设置了ReuseAdress,java还是会保留这些套接字来重用它们吗?
我正在使用Java代码执行批处理文件.代码如下:
Process proc = null;
proc = Runtime.getRuntime().exec("cmd /c start somebat.bat");
Run Code Online (Sandbox Code Playgroud)
这样,正常的命令提示屏幕就会打开.现在我想要压缩/隐藏命令提示符窗口(黑色).我找到了某个地方,如果我从命令中删除了start属性,它就不会出现,但是当从命令中删除它时,命令不会执行,也不会显示异常.
任何人都能告诉我如何压制这个窗口吗?
问题:无法正确打印Unicode字符.
这是我的语法:
options { k=1; filter=true;
// Allow any char but \uFFFF (16 bit -1)
charVocabulary='\u0000'..'\uFFFE';
}
ANYCHAR :'$'
| '_' { System.out.println("Found underscore: "+getText()); }
| 'a'..'z' { System.out.println("Found alpha: "+getText()); }
| '\u0080'..'\ufffe' { System.out.println("Found unicode: "+getText()); }
;
Run Code Online (Sandbox Code Playgroud)
调用词法分析器的main方法的代码片段:
public static void main(String[] args) {
SimpleLexer simpleLexer = new SimpleLexer(System.in);
while(true) {
try {
Token t = simpleLexer.nextToken();
System.out.println("Token : "+t);
} catch(Exception e) {}
}
}
Run Code Online (Sandbox Code Playgroud)
对于输入"ठ",我得到以下输出:
Found unicode:
Token : ["à",<5>,line=1,col=7]
Found unicode: …Run Code Online (Sandbox Code Playgroud) 我想按名称获取函数的地址。
例如,目前我正在使用dlsym:
unsigned long get_func_addr(const char *func_name)
{
return (unsigned long)dlsym(NULL, func_name);
}
Run Code Online (Sandbox Code Playgroud)
但是,dlsym仅适用于外部功能。它不适用于静态功能。我知道在不同的文件中可以有多个同名的静态函数。但是我至少需要获得一个带有名称的静态函数的地址。有时静态函数会被内联。但是如果用调试编译C文件就可以了。我认为-g,静态函数的符号表是存在的,但我如何访问它?
我不想创建一个表来将字符串映射到函数地址。我需要找到一种方法来动态地做到这一点。
我需要在Perl程序中处理一些HTTP URL,但我怀疑这个URI类应该如何帮助我.
特别是,我希望使用URI该类来解析相对URL并获取它们的组件.但问题是:
我需要一个函数来处理URI对象和URI字符串作为参数(或确保只传递一个)
sub foo_string_or_url {
my $uri = URI->new(shift);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我不太喜欢它,因为它URI不必要地串化并创建新对象.
提取组件
my $host = $uri->host;
Run Code Online (Sandbox Code Playgroud)
这也是有问题的,因为并非所有URIs都有主机,特别是如果有人将垃圾传递给函数,这将是die().
解析相对URL
my $new_url = URI::URL->new($uri, $base)->abs;
Run Code Online (Sandbox Code Playgroud)
IIUC,没有->abs,结果仍然会串联到相对URL(并且不适用于HTTP::Requests),我是对的吗?此外,这是否保证返回URI?
我该如何处理这些问题?可能性是
->isa('URI')和->can("host")所有时间
URI类并使用正则表达式解析URL
URI操作try { ... } catch { ... }
使用这些URI课程是否有一种理智,傻瓜的方式?我没有想到的简单(在上面的列表中)?
在回答关于SO的不同问题时,我遇到了一个与gcc有点可疑的编译器错误.有问题的片段是
template <class T> class A;
template <class T, class U>
void operator*(A<T>, A<U>);
template <class T>
class A {
friend void ::operator*(A<T>, A<T>);
...
Run Code Online (Sandbox Code Playgroud)
最后一行给出了着名的警告
friend declament'
void operator*(A<T>, A<T>)'声明一个非模板函数
导致以后的硬错误.完整的代码可以在这里找到.
现在,问题是我不认为这种行为是恰当的.[temp.friend]/1中的标准说:
对于不是模板声明的友元函数声明:
- 如果朋友的名称是限定或不合格的模板ID,则友元声明引用功能模板的特化,否则
- 如果friend的名称是qualified-id并且在指定的类或命名空间中找到匹配的nontemplate函数,则friend声明引用该函数,否则,
- 如果friend的名称是qualified-id并且 在指定的类或命名空间中找到了模板函数的匹配特化,则friend声明引用该函数的特化,否则,
这是C++ 03; C++ 11包含类似的子句
模板的特化由[temp.spec]/4定义:
...专门化是实例化或显式专用的类,函数或类成员(14.7.3).
和[temp.fct.spec]/1:
从函数模板实例化的函数称为函数模板特化; 所以是函数模板的显式特化.模板参数可以明确指定...
[temp.arg.explicit]/2说明了为函数规范指定模板参数列表:
当引用函数模板的特化时,可以指定模板参数列表
...
- 在朋友声明中.
可以推导出的尾随模板参数(14.8.2)可以从显式模板参数列表中省略.如果可以推导出所有模板参数,则可以省略它们; 在这种情况下,也可以省略空模板参数列表<>本身.
所以,通过[temp.fct.spec]/1,::operator*<T,T>(A<T>, A<T>)是一个函数模板专门化; 并且由于可以推导出模板参数,因此可以将其称为::operator*(A<T>, A<T>).所以我总结了friend声明中的qualified-id表示一个函数模板特化.
我认为强调的条件已经实现; 因此,友元声明应该与运营商模板(隐式)专业化的类成为朋友.然而,gcc认为不然,并继续第四个子弹,只涉及由不合格的id指定的朋友,即使这个朋友实际上是由一个合格的id命名 …