我正在尝试写入文件,如果该文件不存在则创建它.我在互联网上搜索过,没有什么对我有用.
我的代码看起来像这样:
QString filename="Data.txt";
QFile file( filename );
if ( file.open(QIODevice::ReadWrite) )
{
QTextStream stream( &file );
stream << "something" << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果我在目录中创建一个名为Data的文本文件,它将保持为空.如果我不创建任何东西,它也不会创建文件.我不知道该怎么做,这不是我尝试创建/写入文件的第一种方式,而且没有一种方法可行.
谢谢你的回答.
目标是从互联网上下载文件,并从中创建一个文件对象,或者像对象这样的文件,而不必触摸硬盘.这只是为了我的知识,想要知道它是否可行或实用,特别是因为我想看看我是否可以避免编写文件删除行.
这就是我通常从网上下载内容并将其映射到内存的方式:
import requests
import mmap
u = requests.get("http://www.pythonchallenge.com/pc/def/channel.zip")
with open("channel.zip", "wb") as f: # I want to eliminate this, as this writes to disk
f.write(u.content)
with open("channel.zip", "r+b") as f: # and his as well, because it reads from disk
mm = mmap.mmap(f.fileno(), 0)
mm.seek(0)
print mm.readline()
mm.close() # question: if I do not include this, does this become a memory leak?
Run Code Online (Sandbox Code Playgroud) 我正在考虑正则表达式,但这并不完全可读。还有一些功能s.toUpper()需要考虑,可能还有其他事情。
那么将 QString 中单词的首字母大写的最佳方法是什么?
我需要我的字符串重复n次,如下所示:
QString s("Dog");
qDebug() << s * 3;
"DogDogDog"
Run Code Online (Sandbox Code Playgroud)
我知道您可以使用single做到这一点char,但是我不知道如何使用字符串来做到这一点,而无需借助创建如下的for循环:
https://paste.fedoraproject.org/300131/94336814/
有捷径吗?
我最近在我的系统中构建并安装了 llvm,期望这将是构建 qtcreator 所必需的: https: //paste.ubuntu.com/p/23GCCS5xxS/
\n根据我在那里看到的内容,我将变量设置为:
\n\xe2\x9e\x9c qt6.2 git:(6.2) \xe2\x9c\x97 echo $LLVM_INSTALL_DIR\n\n/usr/local/lib/cmake/llvm/\nRun Code Online (Sandbox Code Playgroud)\n然而在配置Qt6.2时,它仍然给出
\nWARNING: QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.\nEither set CMAKE_PREFIX_PATH or LLVM_INSTALL_DIR to the location of your llvm installation.\nRun Code Online (Sandbox Code Playgroud)\n据我了解,当我构建 llvm 时,我没有用它构建 Clang。基于https://clang.llvm.org/get_started.html它给出了以下行:
\ncmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm\nmake\n#This builds both LLVM and Clang for debug mode.\nRun Code Online (Sandbox Code Playgroud)\n这很令人沮丧,因为我现在必须再次构建它,这需要很长时间。\n我只是喜欢从 llvm 构建和安装所有内容的命令,所以我不必继续回到这些事情。那可能吗?
\nQPair很好,但如果我需要3件物品怎么办?我应该制作一个结构,还是Qt让我被覆盖?
QTime类为我提供了一些麻烦,因为它不允许我将毫秒设置为高于某些值,\xc2\xa0因此 \xc2\xa0 使这样的条目无效。:
\n\n QTime time;\n time.setHMS(0,0,0,42010958); // I normally use a variable\nRun Code Online (Sandbox Code Playgroud)\n\n考虑到我正在处理的毫秒范围介于 about1000和之间1000000000,我不太热衷于编写大量整数转换代码来清理每个条目,但我会做我必须做的事情。
42010958在 Qt 中将毫秒转换为最简洁的方法是什么Hours:Minutes:Seconds?
到目前为止,我使用qDebug().noquote(). 这很容易,因为它只需要一个简单的#import <QDebug>
现在我需要将所有内容输出到stdout,但我不知道如何轻松完成。我是这样被教导的:
QTextStream cout(stdout, QIODevice::WriteOnly);
Run Code Online (Sandbox Code Playgroud)
然而,创建一个新对象比一个简单的#import <QDebug>. stdout在qt中处理的好/最不麻烦的方法是什么?
QPointer有一个方法,clear()。
清除这个 QPointer 对象。
我不确定“清楚”究竟是什么意思。在我看来,这可能意味着
或者
QPointer<T>对象不再绑定到任何指针。或许还有别的意思?你能告诉我它实际上是做什么的吗?
我希望QString允许这样:
QString myString("School is LameCoolLame and LameRadLame");
myString.replace(QRegularExpression("Lame(.+?)Lame"),"\1");
Run Code Online (Sandbox Code Playgroud)
离开
"School is Cool and Rad"
Run Code Online (Sandbox Code Playgroud)
与我在文档中看到的不同,执行此操作需要您做更多的复杂(从文档中):
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) {
QString matched = match.captured(0); // matched == "23 def"
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者在我的情况下这样的事情:
QString myString("School is LameCoolLame and LameRadLame");
QRegularExpression re("Lame(.+?)Lame");
QRegularExpressionMatch match = re.match(myString);
if (match.hasMatch()) {
for (int i = 0; i < myString.count(re); i++) {
QString newString(match.captured(i));
myString.replace(myString.indexOf(re),re.pattern().size, match.captured(i));
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用(我实际上放弃了).必须有一种更方便的方式.为了简单起见和代码可读性,我想知道采用最少行代码完成此任务的方法.
谢谢.