我正在为Windows平台开发一个使用Qt 4.6,CMake 2.8和Visual Studio 2008的大型项目.
到构建系统为止,这都是标准的东西:我正在使用CMake的QT4_WRAP_CPP宏从头文件生成moc文件,然后将其链接到add_executable命令中的最终可执行文件.一切都按预期工作.
这种设置的唯一限制是我无法Q_OBJECT在.cpp文件中定义小部件或帮助程序 .对于应该出现在它们使用位置旁边的小型特定于上下文的助手类,这将非常方便.
我试图将整个源文件列表(.h和.cpp)传递给QT4_WRAP_CPP,而不仅仅是头文件,但这不起作用(链接失败,因为一些moc相关的符号是未定义的).
我认为问题是,对于给定的文件对foo.h和foo.cpp,QT4_WRAP_CPP宏将在同一目录中生成相同的moc文件(moc_foo.cxx),显然这意味着第一个文件将被覆盖第二个,结果符号将在链接时丢失.
有没有办法解决或解决这个问题?例如,我试图为表单的foo.cpp添加一个特定的规则
QT4_GENERATE_MOC(directory/foo.cpp directory/foo.moc)
Run Code Online (Sandbox Code Playgroud)
然后添加
#include "foo.moc"
Run Code Online (Sandbox Code Playgroud)
在foo.cpp的末尾.我认为这应该可以工作,但是唉,Visual Studio只允许每个文件一个构建规则,而.cpp文件已经有一个构建规则(编译到目标文件),所以这种方法不起作用,至少使用Visual Studio.
我的另一个想法是创建一个新的宏,比如QT4_WRAP_CPP_WITH_PREFIX,基于QT4_WRAP_CPP(在share/cmake-2.8/Modules/Qt4Macros.cmake中定义),它将采用额外的前缀参数并将此前缀添加到生成的moc中文件.这样,我会调用QT4_WRAP_CPP_WITH_PREFIX两次,一次用于.h文件,一次用于.cpp文件,用不同的前缀.我只是不喜欢这种方法,我会搞乱CMake的Qt支持的内部,而不是使用公共API.
有什么好主意吗?
Cheerz,Franz
在Eclipse中,可以使用Paths和Symbols中的Symbols选项为项目指定预处理定义(#ifdef宏).这有助于有效地索引跨平台的代码.有没有选择在Qt创建者中提供这些?
我发现,如果我使用的griddata方法与Cubic插值方法,对某些价值观x,y,它将返回NaN.一篇文章说这是因为x和y数据非常靠近凸壳.
知道如何解决这个问题吗?
编辑:请注意,我无法确保我的输入单调增加(因此,gridfit不起作用).原因是因为我必须对我的区域进行网格划分(可能是2D中的不规则多边形),在Z为每个点生成相应的值之前获取所有点.我的代码如下:
function ZI=Interpolate3D(scatteredData, boundary)
%scatteredData is the scattered points, boundary is the area that I want to generate 3D surface.
% Given the boundaries, generate mesh first
[element,points]= GenMesh(boundary);
ZI = griddata(scatteredData(:,1),scatteredData(:,2),scatteredData(:,3),points(:,1),points(:,2), 'cubic',{'QJ'});
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Scala中编写一个程序,它将接受SOAP请求,从真实服务器获取响应(或从本地磁盘读取它)并将数据返回到原始客户端.
我是java/scala生态系统的新手,所以我不知道要选择哪些库.我听说Scala的XML处理非常好,所以我不知道,我是否应该使用一些企业级的肥皂库/框架,如jax-ws,jboss-ws,axis,cxf,xmlbeans等.
基本上,我只是需要
我之前已经意识到这个问题,但我想它和现在的情况一样重要.
我发现Firefox对于无法更改的输入字段的默认行高为1.2.至少在OSX中,没有Windows,所以我无法在那里确认.
我做了一些实验和测试,没有办法改变Firefox的默认行高值.所有其他浏览器(好吧,我只是尝试使用Chrome和Safari)完全可以服从我的价值,但不是Firefox.
有没有人注意到这一点,如果是的话,你有没有找到解决方案来解决这个问题?
我正在使用Quartz Scheduler v.1.8.0.
scheduler.standby()和scheduler.pauseAll()之间有什么区别?
standby() - 暂时停止调度程序触发触发器.
pauseAll() - 暂停所有触发器 - 类似于在每个组上调用pauseTriggerGroup(group),但是,在使用此方法之后,必须调用resumeAll()以清除调度程序的"记住"状态,即所有新触发器将暂停,因为它们是添加.
基于我从API文档中理解的内容,我无法轻松/清楚地区分/区分每个文档.我看到它们都服务于相同的目的 - 暂时暂停/暂停调度程序中的所有触发器,然后是start()(用于待机)或resumeAll()(用于pauseAll)以清除调度程序的状态.还有其他区别吗?
希望专家可以帮助我理解任何微妙的差异.
我试图弄清楚如何在Web场方案中使用WCF实现重放攻击检测机制.
WCF通过使用nonce缓存提供这种检测机制.如果我错了,请纠正我,但确保在邮件安全和Web场方案中防止此攻击的唯一方法是使用跨服务器共享的nonce缓存.
在WSE3.0中,过去可以提供nonce缓存自定义实现
http://msdn.microsoft.com/en-us/library/ff647945.aspx
但是在WCF中似乎没有任何方法可以这样做(没有配置选项,除了我在Reflector中发现NonceCache类被标记为密封和内部..)
有什么想法吗?