在以下过程中,是否将数组分配到堆栈中?
procedure One:
var
arr: array[0..1023] of byte;
begin
end;
Run Code Online (Sandbox Code Playgroud)
什么是可以进入堆栈的最大项目?
访问堆栈和堆上的变量之间是否存在速度差异?
我的Qt桌面应用程序是在editabletreemodel示例应用程序上构建的.在treemodel.cpp中的示例应用程序中,有一个名为getItem()的方法,它将QModelIndex作为参数并返回指向TreeItem的指针.
这是方法的样子:
TreeItem *TreeModel::getItem(const QModelIndex &index) const
{
if (index.isValid()) {
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
if (item)
return item;
}
return rootItem;
}
Run Code Online (Sandbox Code Playgroud)
我想反过来 - 这是为给定的TreeItem返回一个QModelIndex.
我怎样才能做到这一点?
在Delphi/Pascal中,有一种机制,通过该机制,方法中的局部变量可以记住从一个方法调用到下一个方法的值.这是使用类型常量完成的.例如:
procedure blah();
const
i: integer = 0;
begin
i := i + 1;
writeln(i);
end;
Run Code Online (Sandbox Code Playgroud)
每次调用blah()时我都会增加.输出结果如下:
1 2 3 4 5 ...
(每个数字在不同的行上,但编辑器将它们放在同一行上)
Java有同等的东西吗?
在我的应用程序中,我在顶部有一个树视图,上面有一些与树视图相关的按钮.在这下面我有一个表格视图,再次与一些相关的按钮.我有一个顶部和底部的QVBoxLayout.
请看屏幕显示.
我想做的是能够以QPlitter允许的方式调整顶部和底部的大小.但是...... QSplitter只接受小部件,而不接受布局.
我希望能够拖动屏幕截图中红线所在的位置.
我在C++中创建布局而不是在设计器中.
有没有办法做到这一点?

Windows资源管理器在复制时重命名文件并找到现有文件 - 我们是否可以从Delphi代码访问该工具?
在使用时编写重命名目标文件名的代码是相当直接的TFile.Copy(),但如果可用的话,最好使用现有的代码.
使用QSplitter时,有时很难看出是否存在"可抓取"区域以及在哪里点击以获取它.
我想将抓取区域的颜色设置为与背景不同的颜色,以便可见.
这可能吗?
在我的应用程序中,我正在使用 QTreeView 进行内部拖放。使用本教程,我可以使用 mime 类型“application/vnd.text.list”将其编码到字符串列表中,从而愉快地拖放单个叶子。
然后,我想拖放一个具有一些子节点的树节点,并认为执行此操作的最佳途径是将指针编码为该节点,并在 dropMimeData 方法中迭代所有子节点。
我在 mimeTypes() 方法中声明了一个 mime 类型:
QStringList toResultModel::mimeTypes() const {
QStringList types;
types << "text/plain";
types << "application/vnd.mypointerlist.list";
return types;
}
Run Code Online (Sandbox Code Playgroud)
并尝试传递相同的字符串列表,但应用程序在 dropMimeData() 方法中崩溃。
看来 mime 类型“application/vnd.text.list”有一些我无法找到的隐藏含义。
我找到了这个源代码: http://fossies.org/linux/tora/src/toresultmodel.cpp,其中作者设置了自定义编码类型“application/vnd.tomodel.list”,并且还使用“application/vnd.tomodel.list”。 int.list”。
使用编码类型有哪些规则?内置类型字符串在哪里定义?我应该使用哪种类型来将指针传递给树节点?
在我的桌面应用程序中,我使用QSettings来保存各种应用程序值.例如,主表单位置,最近文档,连接参数以及一些改变应用程序行为方式的内容,例如"在信息对话框中不再显示此消息".
我通常的处理方法是在应用程序启动时将所有设置读入结构或对象,并在应用程序关闭时保存它们.
我还有一个对话框,可以让我编辑设置对象中的许多值,并在关闭对话框时保存它们.
许多窗口和非可视对象都需要设置对象中的值.
做这个的最好方式是什么?
我已经开始将设置对象作为主窗口的成员,但后来我遇到了其他窗口需要访问主窗口成员的问题.
我确实认为我可以在自己的cpp文件中创建设置对象,只需#include需要的地方.但我不确定这是否可能或它的语法.
这种情况的最佳做法是什么?
在最近的一个涉及通过串行链接接收字符串的应用程序中,我发现自己编写了如下代码:
if (pos('needle', haystack) = 1) then ...
Run Code Online (Sandbox Code Playgroud)
为了检查特定的子字符串是否位于字符串的开头。
让我惊讶的是 pos 函数对此并不理想,因为它不知道我要在哪个位置查找子字符串。
有没有一个好的功能可以做到这一点?
有没有更通用的函数,例如IsSubStringAt(needle, haystack, position)?
我确实考虑过使用这样的东西:
function IsSubstrAt(const needle, haystack: string; position: Integer): Boolean;
var
ii: integer;
begin
result := true;
for ii := 1 to length(needle) de begin
if (haystack[poition + ii -1] <> needle[ii]) then begin
result := false;
break;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
进行一些错误检查。
我希望找到一个现成的答案。
我正在使用OLE通过Outlook发送电子邮件.我使用的代码是:
procedure SendOutlookMail;
const
olMailItem = 0;
var
OKToUse: boolean;
Outlook: OleVariant;
vMailItem: variant;
begin
OKToUse := false;
try
Outlook := GetActiveOleObject('Outlook.Application');
OKToUse := true;
except
try
Outlook := CreateOleObject('Outlook.Application');
OKToUse := true;
except
on e: exception do begin
ShowMessage(e.Message);
end;
end;
end;
if VarIsType(Outlook, varDispatch) then
ShowMessage('Outlook is varDispatch')
else
ShowMessage('Outlook is ***NOT*** varDispatch');
if OKToUse then begin
vMailItem := Outlook.CreateItem(olMailItem);
vMailItem.Recipients.Add('mike@example.com');
vMailItem.Subject := 'What a wonderful test email';
vMailItem.Body := 'This is a test --> how amazing';
vMailItem.Send; …Run Code Online (Sandbox Code Playgroud)