我正在制作一个在QT中复制文件的程序.我想知道如何与bool QFile::copy(const QString & fileName, const QString & newName)一起使用QProgressBar. copy函数甚至可以吗?可以暂停复制的过程吗? 解决方案 您无法使用static Qfile :: copy()方法进行此操作. 正如Maciej所述,在您需要写自己的课之前.它应该使用两个QFILE对象,一个用于读取一个用于编写的对象.将数据分为部分(例如整个文件大小的1%),并在每个部分后发出进度信号.您可以将此信号连接到进度对话框. 如果您需要在后台工作,则应使用Qthread实施. 首先尝试确定您是否需要一类,该类使复制工作不合格(不阻止GUI)或同步(阻止GUI).后者更容易编程,但大多数情况下不是预期的(例如,如果GUI被阻止,您无法通过按钮单击或暂停复制操作). 您可以在这里查看相当大的QT 4类: http://docs.
以下是关于 qfile 的编程技术问答
目前在SBC(Olimex A20)的GPIO上工作,我对QSocketNotifier有问题.在我的GPIO上,我正在使用具有中断能力的别针(对于那些想了解更多信息的人: 那是我的中断课程: OLinuXinoGPIOEdge::OLinuXinoGPIOEdge(int num) : m_gpioNumber(num), m_value(false), m_direction(IN) { this->exportGPIO(); // equivalent to 'echo num > export' this->setDirection(IN); // for security m_fileValue.setFileName("/sys/class/gpio/gpio20_pi11"); // the path of the pin this->setEdge(BOTH); // edge's detection (both/falli
我可以从qfile从k+l读取字节,从qfile读取第一个整个文件中的qbytearray if (!file.open(QIODevice::ReadOnly)) //... QByteArray blob = file.readAll(); QByteArray bytes = blob.mid( k, L); 如何有效地读取从k到k+l的字节? if (!file.open(QIODevice::ReadOnly)) //... QByteArray bytes = bytesFromFile( file, k, L); 解决方案 使用Seek方法来到达您要开始阅读的文件中的位置. 然后使用读取方法从此开始读取任意数量的字节. 即. if (!file.open(QIODevice::ReadOnly)){ file.seek(k); QByteArray bytes = file.read(
我是QT的初学者,我项目的一部分是将现有文件移至另一个现有目录?有人可以给我一个具体的例子吗?我不确定是否应该使用qfile :: rename().我尝试像这样写 QDir::rename("/home/joshua/test.txt","/home/joshua/test/test_c.txt"); 但是,错误是无法调用成员函数'bool qdir :: rename(const qString&,const qString&)'没有对象 QDIR :: Rename("/home/joshua/test.txt","/home/joshua/joshua/test/test_c.txt"); ^ 对不起,我错了,我问了一个不清楚的问题,我很抱歉浪费你的时间,我是一个初学者,在我问这个问题之前,我真的没有注意到这个问题以前被问到,因为我的水平很低.因为我太幼稚了,我再也不能问问题了,所以请原谅我问这个问题,我太压力了,因为我在一家公司实习,我对我的项目很难浪费您的时
有其他方法可以交流qfile提交吗?与此不同: QFile myFile("goforward.raw"); int FileDescriptor = myFile.handle(); FILE* fh = fdopen(FileDescriptor, "rb"); 解决方案 我想您已经知道您有各种open,read等.qfile中的方法.也就是说,如果未打开文件,则handle方法将返回错误. QFile myFile("goforward.raw"); myFile.open(QIODevice::ReadOnly); int fileHandle = myFile.handle(); 之后,您可以重新打开它: FILE* fh = fdopen(fileHandle, "rb"); 其他解决方案 我们的应用程序遇到了非常奇怪的问题,最后将其追溯到qfile/fdopen问题: void foo(QString filename) {
我从QT开始,并且遇到问题据说现在已经很长时间了.我确定这只是我在C ++中看不到的东西.无论如何,请查看以下简单代码,并指出我在做什么错: typedef struct FILEHEADER { char udfSignature[8]; char fileName[64]; long fileVersion; UNIXTIME fileCreation; UNIXTIME lastRebuild; FILEPOINTER descriptor; } fileheader; QFile f("nanga.dat"); if(f.open(QIODevice::ReadWrite)); f.write(fileheader); QT 5.2.0向我拖了以下错误消息: C:\sw\udb\udb\main.h:113: error: no matching function for call to 'QFile::
是任何熟悉如何通过CSV文件解析并将其放入字符串列表中的人.现在,我将整个CSV文件放入字符串列表中.我试图弄清楚是否有一种方法只能获得第一列. #include "searchwindow.h" #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *widget = new QWidget(); QHBoxLayout *
这很奇怪,我通过添加现有文件添加所需的文件... ,该文件在那里.我运行qmake(" build-> run qmake")以使文件可用. 第一个问题: 我无法从输出终端中写入任何内容! ,但是当我手动写入文件时,输出终端每次运行时都会显示更改它.第二期:它仍然说 Qiodevice :: read:设备不打开 ! 这是我的代码: #include #include #include #include #include #include void wFile(QString Filename) { QFile nFile(Filename); QTextStream str(&nFile); qDebug()
我正在处理非常大的文件,大小超过数百GB.用户需要能够在磁盘之间移动这些文件,并且在没有默认文件管理器的限制系统上.用户有可能意识到自己犯了一个错误并取消了操作,据我所知,用户必须等待当前的副本或重命名操作才能完成.这可能会使他们在等待几分钟的时间时感到沮丧,只是看到他们的许多GB文件仍在复制.对于复制的情况,我可以删除第二个文件,但是如果我用来移动文件的重命名,我必须反复重复该操作以撤消它,这根本是不可接受的. 我在Qfile文档中没有看到过副本()和Rename()的方法,还是我需要组合自己的课程来处理和重命名? 解决方案 我认为文件大小不会对重命名的时间有任何影响. 对于副本 - QT提供什么都没有内置的,您必须自己实施.这里的关键是,您必须找到一些连续取消复制的方法的方法.这意味着您不能锁定主线程以便能够处理事件. 是否要额外的线程以保持主线程响应迅速或决定使用主线程 - 在这两种情况下,您都需要实现"碎片"复制 - 一次使用缓冲区一次,直到一个块复制文件或
给定QFileDevice实例(A QFile或QSaveFile) - 如何获得文件的本机Windows HANDLE?并且可以与ReOpenFile? 一起使用此处理 解决方案 _get_osfhandle _get_osfhandle 回到HANDLE. struct FdHandle { int fd = -1; HANDLE handle = INVALID_HANDLE_VALUE; operator HANDLE() const { return handle; } bool isFdValid() const { return fd != -1; } bool isHandleValid() const { return handle != INVALID_HANDLE_VALUE; } }; FdHandle windowsHandleOf(QFileDevice* dev) { auto fd = dev->handle();
我是QT初学者,只是遇到了问题.我正在寻找一个文件SomePath/NewDirectoryA/NewFile.kml(NewFile.kml将是NewDirectoryA中的唯一文件,拥有此目录只是为了维护项目中的语义). 如果存在SomePath/NewDirectoryA/NewFile.kml,那么我将在我的代码中使用它,如果它不存在,则必须创建它.如果此文件不存在,则此目录在SomePath中也不存在.因此,如果我只需要创建一个文件,我就可以使用qfile并以readwrite或写入模式打开它. 但是问题是我必须使用目录本身创建文件. 我尝试使用QFile使用文件名SomePath/NewDirectoryA/NewFile.kml但没有起作用. 请建议我在给定位置(某些路径)的新目录(newDirectora)中创建一个新文件(newfile.kml)的方法. 解决方案 bool qfile "> qfile :: Open (openmode
在我的一种方法中,我需要一个 QFile 对象: void GUIsubclassKuehniGUI::LoadDirectory() { QString loadedDirectory = QFileDialog::getExistingDirectory(this, "/home",tr("Create Directory"), QFileDialog::DontResolveSymlinks); ui.PathDirectory -> setText(loadedDirectory); QFileInfo GeoDat1 = loadedDirectory + "/1_geo.m4";
我正在开发一个需要使用 QT (5.6.1) 将大量文件从一个文件夹复制到另一个文件夹的应用程序 为此,我一直在使用 QFile::copy() 方法.这很好用,除了一件事:它非常慢.使用 Windows 资源管理器执行相同复制操作所需时间的两倍以上. 想知道这是为什么,我深入研究了 QT 源代码,并在 qfile.cpp 中找到了这个,看起来很相关: char block[4096]; qint64 totalRead = 0; while(!atEnd()) { qint64 in = read(block, sizeof(block)); if (in setError(QFile::CopyError, tr("Failure to writ
我正在尝试学习如何使用以下代码在窗口应用程序中序列化 QMap 对象: #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include void write () { QString filename = "Z:/snippets.txt"; QFile myFile (filename); if (!myFile.open(QIODevice::WriteOnly)) { qDebug() map; map.insert("one","this is 1"
在我可以继续执行递归目录/文件搜索之前,我想知道 Qt/PyQt 是否具有 os.walk 的类似物. 主应用程序是 PyQt4 中的 GUI 应用程序,QStrings 和路径对象(文件、目录)中的所有文本字段都使用 QFile、QDir、QFileinfo 进行操作. 作为类比,我的意思是快速方便的递归 fs-tree 遍历工具. 我应该使用 os.walk 还是更快、信息量更大的东西? PS.也许 this 可以帮助我,但我不确定这是否比 os.walk 更有效. 解决方案 我应该使用 os.walk 还是更快、信息量更大的东西? 没有,如果可以的话,我建议在 python 中使用 os.walk.它和它一样好. 这不仅是因为Qt没有这种方便的方法,而且即使你基于QDir编写自己的机制,你也可以访问所有三个变量,而无需像os.walk那样手工制作. 如果你急于使用Qt,那么你可以在下面我之前用过的下面的遍历函数. main
我正在编写一个需要写入已安装目录 (C:\Program Files...) 的 Qt 程序(Windows 7 最初为 4.7).当我尝试写入将被“保护"的位置(程序文件、C:\ 等)时,没有创建任何文件.但是,QFile 没有给我任何错误代码(error() 返回 0,这意味着它工作正常). 这是我正在使用的代码片段,但它不起作用.我将在程序的后面关闭文件. QApplication a(argc, argv); // Setting plugin paths. QStringList paths = QCoreApplication::libraryPaths(); paths.append(QCoreApplication::applicationDirPath()); QCoreApplication::setLibraryPaths(paths); // Debug file. QString path = QCoreApplication::applic
从读取的最佳方式是什么?QFile 位于与我要读取的线程不同的线程中? 考虑: class AFile:public QObject { Q_OBJECT public: AFile(const QString& name,QObject * parent = Q_NULLPTR):QObject(parent),m_File(name){m_File.open(QIODevice :: ReadWrite); } public slots: void write(const QByteArray& data,qint64 pos){m_File.seek(pos); m_File.write(data); } private: mutable QFile m_File; }; class AData:public QObject { Q_OBJECT public: using QObject :: QObject;