小编dar*_*ron的帖子

Qt - 具有键盘和鼠标事件透明度的顶级小部件?

我想要一个应用程序的主窗口忽略鼠标和键盘事件,在窗口管理器Z顺序中将它们传递给它下面的应用程序.

我看到如何使窗口小部件忽略键盘或鼠标事件,但主窗口怎么样?

我正在尝试制作一个总是位于背景上的桌面小部件,对键盘和鼠标事件完全不可见.(通过)

Qt :: X11BypassWindowManagerHint让我通过键盘传递(虽然很遗憾X11具体,但现在很好),那么鼠标事件呢?

是否存在与操作系统无关的方式对键盘事件透明?

编辑:

这里的关键词是透明度.

我不想EAT鼠标和键盘事件,我希望窗口管理器知道我根本不需要它们.这些事件应该针对zorder中我的任何应用程序.

例如,我希望能够单击我的窗口小部件所覆盖的桌面图标并与它们进行交互,就好像窗口小部件不存在一样.

qt desktop-application event-handling

40
推荐指数
4
解决办法
2万
查看次数

单一开发人员应该使用TDD的原因是什么?

我是一名有很多经验的合同程序员.我习惯于被客户雇用进入我自己的某种形式的软件项目,通常是从零开始.这意味着几乎每次都是干净的石板.我可以引入我开发的库来快速启动,但它们总是可选的.(并且取决于在合同中获得正确的IP条款)很多时候我可以指定甚至设计硬件平台......所以我们在这里谈论严肃的自由.

我可以看到用于构建某些代码的自动化测试的用途:具有更多简单功能的库,具有大量引用的核心功能等.基本上,随着一段代码的价值在大量使用中上升,我可以看到它自动测试该代码将变得越来越有价值,以便我知道我不会破坏它.

然而,在我的情况下,我发现很难合理化任何东西.我会采用它们证明有用的东西,但我不会盲目跟随任何事情.

我发现我在"维护"中所做的很多事情实际上都是小的设计变化.在这种情况下,测试不会为我节省任何东西,现在他们也必须改变.高度迭代,存根优先的设计方法对我来说非常有效.通过更广泛的测试,我无法看到实际上节省了很多时间.

业余爱好项目更难以证明......他们通常都是从周末到月份的任何事情.边缘案例错误很少发生,它只是玩弄东西.

读书问题,比如这一个,最表决的反应似乎是说,在海报的经验/意见TDD实际上是浪费时间,如果你有少于5人(即使假设能力一定水平与TDD /经验).但是,这似乎涵盖了初始开发时间,而不是维护.目前尚不清楚TDD如何在项目的整个生命周期中叠加.

我认为TDD可以成为提高整个行业产品质量的有价值目标的一个很好的步骤.尽管如此,理想主义本身不再能够激励我.

认为TDD将是大团队是一个很好的做法,或含有至少一个不可靠的程序员任何规模的团队.那不是我的问题.

为什么一个拥有良好记录的唯一开发人员会采用TDD?

我很想知道在TDD上完成的任何指标(正式与否)......专注于独立开发人员或非常小的团队.

如果做不到这一点,你个人经历的轶事也会很好.:)

如果没有经验,请避免说出意见.让我们不要把它作为一场意识形态战争.此外,跳过更大的就业选择论点. 这只是一个效率问题.

tdd methodology

34
推荐指数
4
解决办法
4754
查看次数

在非Qt应用程序中使用基于Qt的DLL

我做得对吗?

我的一个客户有一个小组,我正在开发基于Qt的客户端 - 服务器的东西,有很多有趣的小部件和套接字.

公司内的另一个团队希望使用基于QTcpSocket的客户端数据提供程序类的封装版本.(基本上它听起来像,提供从服务器到客户端显示器的数据)

但是,该组有一个巨大的应用程序,主要是使用MFC构建的,这根本不会很快改变.基于Qt的DLL也是延迟加载的,因此在某些配置中可以在没有此功能的情况下部署它.

我有它的工作,但它有点hacky.这是我目前的解决方案:

DLL包装器类构造函数调用QCoreApplication :: instance()以查看它是否为NULL.如果它为NULL,则假定它在非Qt应用程序中,并创建它自己的QCoreApplication实例:

if (QCoreApplication::instance() == NULL)
{
    int argc = 1;
    char* argv[] = { "dummy.exe", NULL };
    d->_app = new QCoreApplication(argc, argv);  // safe?
}
else
    d->_app = NULL;
Run Code Online (Sandbox Code Playgroud)

然后它将设置一个Windows计时器,偶尔调用processEvents():

if (eventTimerInterval > 0)
{
    // STATE: start a timer to occasionally process the Qt events in the event queue
    SetTimer(NULL, (UINT_PTR)this, eventTimerInterval, CDatabaseLayer_TimerCallback);
}
Run Code Online (Sandbox Code Playgroud)

回调只是使用timerID作为指向类实例的指针来调用processEvents()函数.SetTimer()文档说当HWND为NULL时它会忽略timerID,所以这看起来完全有效.

VOID CALLBACK BLAHBLAH_TimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    ((BLAHBLAH*)idEvent)->processEvents(); // basically just …
Run Code Online (Sandbox Code Playgroud)

dll qt mfc

24
推荐指数
2
解决办法
1万
查看次数

Qt QFileDialog - 只有静态函数的原生对话框?

我只是想保存一个文件.但是,我需要输入一个没有后缀的文件名来自动获取默认后缀(setDefaultSuffix()会这样做).

我不想完全失去本机保存对话框.exec()没有从QDialog重载,所以它完全绕过本机钩子(忽略DontUseNativeDialog选项,即使它是假的).

如果我在函数返回后禁用文件覆盖警告并自己附加默认后缀,那么如果用户不想覆盖那么我将重新打开对话框......这只是丑陋的.

是否有一些我可以捕获的信号并快速注入默认后缀,如果它不存在?我猜不是,因为它是一个原生的对话.

有没有我在过滤器上做错了什么?我只有一个过滤器选择.它应该使用该扩展名.

这看起来很蹩脚.启动保存对话框并简单地键入"test"不应该导致无扩展名文件."测试.",是的."测试"没办法.当用户点击Load并且无法看到他们刚刚保存的文件时,这会让用户感到困惑.

我想Qt的跨平台部分给了我最小的公分母文件对话框功能?

qt qt4 qfiledialog

7
推荐指数
1
解决办法
3435
查看次数

Qt,VS2005,Qwt - 不能在从Qwt小部件派生的类中使用Q_OBJECT

我们为VS2005编译了QT 4.6和QWT 5.2.0.

我们试图从QwtDial派生一个类,派生类有插槽.所以,我们需要添加Q_OBJECT宏.但是,当我们这样做时,链接器会清除此错误:

错误LNK2001:未解析的外部符号"public:static struct QMetaObject const QwtDial :: staticMetaObject"(?staticMetaObject @ QwtDial @@ 2UQMetaObject @@ B)

我用依赖查看了Qwt.dll,它有这个功能.使用十六进制编辑器查看.lib文件显示它与该名称损坏的字符串完全匹配.

我们在路径中有Qwt lib.实际上,如果我重命名lib,那么它会给出一个无法找到lib文件的错误.所以,我们知道它正在寻找正确的lib.

如果我们跳过Q_OBJECT,那么所有内容都使用几个QWT小部件链接和绘制,包括我们的非Q_OBJECT Qwt派生类.

有谁知道什么会导致这个真正烦人的链接器问题?

更新:

我已经验证了我添加Q_OBJECT的类肯定是​​为它生成了一个MOC文件.链接器错误实际上来自此生成的MOC文件:

moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
    struct QMetaObject const QwtDial::staticMetaObject" 
    (?staticMetaObject@QwtDial@@2UQMetaObject@@B)
Run Code Online (Sandbox Code Playgroud)

所以,它看起来像是一种非常典型的东西.符号肯定在lib中.

qt visual-studio-2005 qt4 qwt

5
推荐指数
1
解决办法
4697
查看次数

Apache2和CGI - 如何防止Apache缓冲POST数据?

我正在尝试在CGI中提供文件上传的实时解析,并在屏幕上显示数据.

但是,Apache2似乎想要在完全发送CGI应用程序之前等待完整的POST完成.

如何强制Apache2停止缓冲POST到我的CGI应用程序?

编辑

看起来它实际上是被缓冲的CGI的输出.我开始将数据流式传输到临时文件以观察其进度.那,我有另一个问题.

1)输出正在缓冲.我已经尝试了SetEnvIf(简称SetEnv)用于"!nogzip","nogzip"和"!gzip"但没有成功(在CGI目录定义中).

2)在CGI进程退出之前,Apache2似乎没有读取CGI的输出?我注意到我的CGI应用程序(正在刷新与否)在80K左右的"fwrite(...,stdout)"行上永久挂起.

编辑

好吧,Firefox正在搞乱我.如果我发送150K文件,那么80K左右就没有CGI锁定.如果文件是2G,则有一个锁定.因此,Firefox在尝试发送文件时没有从服务器读取输出...是否有任何标题或备用内容类型来更改该行为?

编辑

好吧,我想大文件上的CGI输出锁定实际上并不重要.我不需要回显文件!我正在调试由调试辅助工具引起的问题.:)

我想这个效果还不错.谢谢!

最后的说明

就像一个注释......我认为Apache2缓冲输入的原因是我总是得到一个"Content-Length"环境变量.我猜FireFox足够聪明,可以预先计算多部分表单上传的内容长度,而Apache2正在传递它.我认为Apache2正在缓冲输入并报告长度本身.

forms apache post cgi apache2

5
推荐指数
1
解决办法
4836
查看次数