一个非常简单的问题:
type
TMyRecord = Record
Int: Integer;
Str: String;
end;
PMyRecord = ^TMyRecord;
var
Data: PMyRecord;
begin
New(Data);
Data.Int := 42;
Data.Str := 'Test';
Dispose(Data);
end;
Run Code Online (Sandbox Code Playgroud)
我的问题是,我在这里创建了一个内存泄漏(有String)吗?我打电话Data.Str := '';之前应该打电话Dispose吗
谢谢!
我已经在这工作了几个小时,无法弄明白,也无法找到任何有效的在线帮助.基本上我要完成的要点就是拥有一个带按钮的Qt GUI和一个QTextBrowser.当我按下按钮时,我希望它显示一条消息,然后每隔10秒继续打印此消息.
我想我会使用QTimer,因为有一个计时器每10秒显示一次消息是有意义的.当我最初将它实现到我的`buttonClicked()SLOT时,它导致程序冻结.我在网上寻找解决方案并找到了QApplication :: processEvents().
所以基本上在我的函数中我有这样的东西:
while(1)
{
QTimer *timer;
connect(...) //omitted parameters for this example
timer.start(10000);
ui->diplay->append("Message");
while(timer.isActive())
{
QApplication::processEvents()
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它会在while循环中突破timer.isActive(),但它不会简单地停留在那里.
所以我认为这是一个线程问题.所以我想出了如何使用QThreads,但我仍然无法让它工作.基本上当我创建一个带有计时器的线程并且线程告诉计时器启动时,程序关闭并且控制台显示"程序意外完成".
必须有一个简单的方法来做到这一点,但我与Qt的记录一直是那个
我想std::stringstream用来创建格式化的字符串,但使用内联类,所以我没有stringstream局部变量飞来飞去.我的意思是:
#include <iostream>
#include <ostream>
#include <string>
#include <sstream>
int main(int argc, char* argv[])
{
std::string test = ((std::ostringstream&)
(std::ostringstream("") << "This is a test: " << 50.1 << "abc")
).str();
std::cout << test << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这在GCC中编译很好,但输出如下:
"0x401d0a50.1abc"
因此,似乎stringstream将第一个字符串视为指针并输出地址.随后operator<<的工作很好.
我该如何解决?谢谢!
看看这一小块Qt代码
qDebug() << "CONTENT" << content;
QTextEdit *te = new QTextEdit(this);
te->setHtml(content);
qDebug() << "CONTENT AFTER " << te->toHtml();
Run Code Online (Sandbox Code Playgroud)
内容最初包含此HTML
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
<head>
<meta name=\"qrichtext\" content=\"1\" />
<style type=\"text/css\"> p, li { white-space: pre-wrap; } </style>
</head>
<body style=\" font-family:'Calibri'; font-size:10pt; font-weight:400; font-style:normal;\">
<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">
<span style=\" font-family:'Verdana'; color:#0b333c;\">MY TEXT</span>
</p>
</body>
</html>"
Run Code Online (Sandbox Code Playgroud)
......但输出te->toHtml()是......
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
<head>
<meta name=\"qrichtext\" content=\"1\" …Run Code Online (Sandbox Code Playgroud) 我需要接收绝对文件路径,例如
C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx
来自QRC文件的路径,例如
:/Data/ExperimentDefaults.xlsx。
我怎样才能做到这一点?
Qt Designer添加一个几何标签,其中包含小部件的默认大小(绝对单位(像素)).
这真的很烦人,因为如果你ui在4k显示器上编辑一个文件,你ui的所有s(默认情况下)会在较低的DPI系统上显示大量的空白区域.
如果我手动删除此标记,我的窗口在首次显示时具有预期的大小,但每次ui在Qt Designer中打开它时手动编辑每个文件都会出错.
我正在使用Qt 5.9.
什么是阻止Qt Designer添加此XML标记的范例方法?
在 example.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Example</class>
<widget class="QMainWindow" name="Example">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>970</width>
<height>1371</height>
</rect>
</property>
Run Code Online (Sandbox Code Playgroud) 在下面的程序中,我试图用非ASCII字符来测量字符串的长度.
但是,我不确定为什么size()在使用非ASCII字符时不会打印正确的长度.
#include <iostream>
#include <string>
int main()
{
std::string s1 = "Hello";
std::string s2 = "??????"; // non-ASCII string
std::cout << "Size of " << s1 << " is " << s1.size() << std::endl;
std::cout << "Size of " << s2 << " is " << s2.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Size of Hello is 5
Size of ?????? is 18
Run Code Online (Sandbox Code Playgroud)
现场演示Wandbox.
在创建样条图表时,它会在图表中获得循环,而某些部分则超出了图表面板.请找到以下代码
ChartView {
title: "Spline"
anchors.fill: parent
antialiasing: true
SplineSeries {
name: "SplineSeries"
XYPoint { x: 154593917; y: 612.5 }
XYPoint { x: 154594277; y: 425 }
XYPoint { x: 154594632; y: 437 }
XYPoint { x: 154594997; y: 460 }
XYPoint { x: 154595357; y: 506 }
XYPoint { x: 154596073; y: 513 }
XYPoint { x: 154596437; y: 527 }
XYPoint { x: 154596797; y: 575 }
XYPoint { x: 154597517; y: 632 }
XYPoint { x: 154597877; …Run Code Online (Sandbox Code Playgroud) 今天我发现Qt枚举screen(QGuiApplication::screens)的顺序与Windows(EnumDisplayMonitors)中的顺序不同.
这种差异背后的逻辑是什么,以便在混合使用Windows API和Qt时将其考虑在内?例如,如果需要在屏幕#2中显示某些内容(使用Windows枚举).
这里是我用来测试的代码(也可以在GitHub中使用):
#include <qapplication.h>
#include <qdebug.h>
#include <qscreen.h>
#include <Windows.h>
#include <iostream>
std::ostream& operator<<(std::ostream& of, const RECT& rect)
{
return of << "RECT(" << rect.left << ", " << rect.top << " " << (rect.right - rect.left) << "x" << (rect.bottom - rect.top) << ")";
}
BOOL CALLBACK printMonitorInfoByHandle(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
auto index = (int*)dwData;
std::cout << ++*index << " " << *lprcMonitor << std::endl;
return …Run Code Online (Sandbox Code Playgroud) 我一直在阅读为 C++23 提出的库更改列表,我对std::out_ptrand std::inout_ptr(他们的_t兄弟姐妹)很好奇。据我所知,它们是智能指针与原始指针兼容的某种包装,但我还没有设法理解它们。也许这里有人熟悉该提案,或者可能会给出不太像ISO 的解释或示例?