在Delphi中,我经常OnAfterShow为主要表单制作一个事件.OnShow()表单的标准几乎没有,postmessage()这将导致该OnafterShow方法被执行.
我这样做是为了有时冗长的数据加载或初始化不会停止正常加载和显示主窗体.
我想在Qt应用程序中执行类似的操作,该应用程序将在Linux或Windows的台式计算机上运行.
我有什么方法可以做到这一点?
当我在我的应用程序中关闭表单时,我收到了访问冲突.它似乎只是在我访问数据库几次之后才会发生,但这似乎没有意义.
我已经跟踪并将outputdebugstring消息放在所有相关的OnDestroy()方法中,但AV似乎不在我的代码中.
这是消息的文本:
模块"MySoopaApplication.exe"中地址00405F7C的访问冲突.读取地址00000008.
如何找到应用程序00405F7C中的位置?
Delphi 10.1柏林有哪些工具可以帮助我解决这个问题?
编辑:添加了更多信息...当点击"Break"时,IDE总是带我到GETMEM.INC中的这段代码:
@SmallPoolWasFull:
{Insert this as the first partially free pool for the block size}
mov ecx, TSmallBlockType[ebx].NextPartiallyFreePool
Run Code Online (Sandbox Code Playgroud)
进一步编辑:好吧,我找到了罪魁祸首,虽然我不能老实说调试工具让我在那里 - 他们似乎只是表明它不在我的代码中.
我曾经使用网络中的代码来查找Windows登录用户 - 这就是:
function GetThisComputerName: string;
var
CompName: PChar;
maxlen: cardinal;
begin
maxlen := MAX_COMPUTERNAME_LENGTH +1;
GetMem(CompName, maxlen);
try
GetComputerName(CompName, maxlen);
Result := CompName;
finally
FreeMem(CompName);
end;
end;
Run Code Online (Sandbox Code Playgroud)
一旦我用简单的结果替换了代码:='12345'AV停止了.我没有改变它到这个代码:
function GetThisComputerName: string;
var
nSize: DWord;
CompName: PChar;
begin
nSize := 1024;
GetMem(CompName, nSize);
try
GetComputerName(CompName, nSize);
Result := CompName;
finally
FreeMem(CompName);
end;
end; …Run Code Online (Sandbox Code Playgroud) 我想在搜索框中为我的应用程序的用户提供通配符匹配.我有一个QTableView,其中包含制造中使用的零件的详细信息,obe column是零件编号,是一个带有" - "的字母数字字段.我喜欢用户能够在搜索框中输入"123*"以隐藏所有不以"123"开头的部分.与"*678","*66*88*"等类似.即,搜索字符串中有多个通配符.
我正在查看QRegularExpression文档,并在"QRegExp用户注意事项"部分中看到了这一点:
QRegularExpression中没有等效的通配符匹配.然而,考虑到QRegExp支持的通配符语法非常简单,将通配符语法中的正则表达式重写为与Perl兼容的正则表达式是一项非常简单的任务.
你能否告诉我如何"非常轻松地"将一个"*88*99*"字符串重写为正则表达式?
我应该说我的一些用户都是技术人员,并且会欣赏在搜索领域使用正则表达式的能力,但大多数都不是,我想给他们一个简单的通配符选项('我是一个善良的编码器: )).
我正在寻找一个线程池.我在线找到了几个例子,但他们在SyncObjs库中使用了TSemaphore.
我正在使用Delphi 6,而我的SyncObjs不包括TSemaphore.我环顾网络,找不到任何源代码.
是否有适用于包含TSemaphore的Delphi 6的库?
是否可以响应顶级菜单项的点击?例如,参考下面的图像,是否可以在单击"帮助"菜单项时运行代码?

如果是这样,我该怎么做?
谢谢.
我有我认为简单的代码 - 我想在QStringList中添加3个字符串.这是我的代码:
baseName = "qwerty";
QStringList *newBOMList;
for (auto ii = 0; ii <= 2; ii++)
{
if (ii == 0) {
newBOMList->append(baseName);
}else
if (ii == 1) {
newBOMList->append("A");
}else
if (ii == 2) {
newBOMList->append(baseName + " description");
}
}
Run Code Online (Sandbox Code Playgroud)
我在第一个追加行上收到编译器警告:
'newBOMList'可以在此函数中使用未初始化[-Wyybe-uninitialized] newBOMList-> append(baseName);
但不是其他两个.
这段代码是一个类的方法.
我喜欢至少理解警告,如果没有在我的项目中摆脱它们,但我真的不明白为什么会发生这种警告.
请问有什么线索吗?
另外,这是将3个字符串添加到QStringList的最佳方法吗?
哦 - 我在Linux机器上使用qt-creator - 如果这有任何区别的话.