问题如下:如果应用程序在没有主动执行任何操作时关闭,则会正确退出.但是,如果它正在积极处理某些事情(例如,等待一段时间循环),则主窗口将关闭,但程序将继续在后台运行,如打开任务管理器所确认的那样.
我今天花了大量时间来搜索问题并实施可能的修复,但无济于事.似乎quit()函数根本不做任何事情.以下是我尝试过的一些事情:
app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));.我知道信号被触发了,因为我尝试改变&app, SLOT(quit()),qApp, SLOT(aboutQt())并且简单地弹出了aboutQt窗口.qApp->quit();在从主窗口按钮运行的函数的开头.应用程序确实运行到该行,但它没有任何效果.processEvents()以确保GUI被更新.mainWindow.setAttribute(Qt::WA_QuitOnClose);main.cpp中的语句.我只是希望应用程序在主窗口关闭时完全退出.
我正在使用qextserialport库,如果这有任何区别.
我有一个需要5到10秒加载的DLL,这意味着每次编译和运行使用它的可执行文件时我都要等待那么长时间.有没有办法将DLL加载到内存中,以便每次编译相应的可执行文件时都可以立即访问它?我正在编译QT MinGW的程序,如果这是相关的.
编辑:到目前为止没有运气.在另一个程序上加载DLL似乎没有任何效果(原始程序仍然加载DLL,并且需要这么长时间).我猜我需要加载DLL及其功能,如果它们已被加载到另一个程序,但我不知道如何做到这一点.现在我正在使用LoadLibrary和GetProcAddress.
我用a QByteArray来存储原始二进制数据.为了存储数据,我使用了QByteArray追加函数.
我喜欢使用无符号字符来表示字节,因为我认为255它更容易解释-1.但是,当我尝试将零值字节附加到a时QByteArray,如下所示:
command.append( (unsigned char) 0x00));
Run Code Online (Sandbox Code Playgroud)
编译器抱怨call of overloaded append(unsigned char) is ambiguous.据我所知,这是因为零可以解释为空指针,但为什么编译器不将unsigned char视为char,而不是想知道它是否是一个const char*?当然,我会理解编译器是否抱怨command.append(0)没有任何转换.
举个例子:
function()
{
calculation1();
while(1)
{
if (test1() == FAIL) { break; }
calculation2();
if (test2() == FAIL) { break; }
calculation3();
if (test3() == FAIL) { break; }
calculation4();
break;
}
final_calculation();
return;
}
Run Code Online (Sandbox Code Playgroud)
每个测试取决于从它之前的所有计算中获得的结果.但是,如果测试失败,则应跳过其余计算.
另一种方法是使用一系列嵌套的if()语句:
function()
{
calculation1();
if (test1() == SUCCESS)
{
calculation2();
if (test2() == SUCCESS)
{
calculation3();
if (test3() == SUCCESS)
{
calculation4();
}
}
}
final_calculation();
return;
}
Run Code Online (Sandbox Code Playgroud)
然而,后一种方法开始看起来非常混乱,除了像上面这样的高度抽象的例子.我相信前一种方法可以更好地扩展到更长,更复杂的代码.有没有理由不采用第一种方法?
一些网站声称字符串类型是标量.据我了解,标量是单值类型,而不是数组类型.但是字符串本质上不是一个字符串吗?那为什么它会成为标量呢?
编辑:如果答案/解释从C到C++不同,我想解释包括两种语言.我正在为这个问题添加C++标签.
我反复阅读过头文件应该包含其他文件使用源代码所需的所有声明.假设您有一个不被其他源文件直接使用的函数(换句话说,非接口函数).它的原型应该放在.c文件的顶部,因为它不会被其他文件使用吗?或者它应该放在带有所有其他函数的头文件中,以便在一个地方完全汇总.c文件中的函数?