小编cbu*_*art的帖子

我在这里创建了内存泄漏吗?

一个非常简单的问题:

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

谢谢!

delphi memory-leaks memory-management delphi-7

7
推荐指数
2
解决办法
1445
查看次数

如何使用QTimer每10秒向QTextBrowser打印一条消息?

我已经在这工作了几个小时,无法弄明白,也无法找到任何有效的在线帮助.基本上我要完成的要点就是拥有一个带按钮的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的记录一直是那个

qt multithreading qt4 timer qthread

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

C++ stringstream inline

我想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<<的工作很好.

我该如何解决?谢谢!

c++ stl stringstream

6
推荐指数
1
解决办法
1431
查看次数

Qt QTextEdit添加虚假行

看看这一小块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++ qt qtextedit

6
推荐指数
1
解决办法
171
查看次数

如何将Qt文件路径从资源转换为绝对路径?

我需要接收绝对文件路径,例如

C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx

来自QRC文件的路径,例如

:/Data/ExperimentDefaults.xlsx

我怎样才能做到这一点?

c++ windows qt path qt-resource

6
推荐指数
1
解决办法
2145
查看次数

如何在Qt Designer UI文件中清除QMainWindow的几何标记

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)

c++ qt qt-designer qt5 uic

6
推荐指数
1
解决办法
374
查看次数

如何测量非ASCII字符的正确大小?

在下面的程序中,我试图用非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.

c++ string size non-ascii-characters c++11

6
推荐指数
2
解决办法
781
查看次数

Qml样条图中的异常

在创建样条图表时,它会在图表中获得循环,而某些部分则超出了图表面板.请找到以下代码

 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)

charts qt spline qml

6
推荐指数
1
解决办法
149
查看次数

Qt如何枚举屏幕?

今天我发现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++ windows qt multiple-monitors qt5

6
推荐指数
1
解决办法
565
查看次数

理解 C++23 中的 std::inout_ptr 和 std::out_ptr

我一直在阅读为 C++23 提出的库更改列表,我对std::out_ptrand std::inout_ptr(他们的_t兄弟姐妹)很好奇。据我所知,它们是智能指针与原始指针兼容的某种包装,但我还没有设法理解它们。也许这里有人熟悉该提案,或者可能会给出不太像ISO 的解释或示例?

c++ pointers c++23

6
推荐指数
1
解决办法
126
查看次数