c++ 如何制作QFiles?列表(QList)及其工作原理?

ar5n3qh5  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(187)

我正在尝试制作一个QFiles列表,我选择了QList方法,但不确定它是否是一个好方法。我编写了此代码,但它无法构建!

QList<QFile> filesList;

QFile file_1(QString("path/to/file_1"));
QFile file_2(QString("path/to/file_2"));

filesList.append(file_1);
filesList.append(file_2);

    for(auto& file : filesList){
        if(!file.open(QIODevice::ReadOnly)){
            qDebug() << "file is not open.";
        }
}

生成失败,出现以下错误:

error: ‘QFile::QFile(const QFile&)’ is private within this context
     if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) n->v = new T(t);
                                                                 ^~~~~~~~

使用QList方法制作***文件列表***以供以后使用好吗?如果是这样,如何修复我的代码?

ruarlubt

ruarlubt1#

看起来问题是QFile类有一个私有的复制构造函数,这意味着它不能被复制。因此,它不能被存储在像QList这样的容器中。解决这个问题的一个方法是在QList中存储指向QFile对象的指针,而不是对象本身。
试试这个:

QList<QFile*> filesList;

QFile* file_1 = new QFile(QString("path/to/file_1"));
QFile* file_2 = new QFile(QString("path/to/file_2"));

filesList.append(file_1);
filesList.append(file_2);

for(auto file : filesList){
    if(!file->open(QIODevice::ReadOnly)){
        qDebug() << "file is not open.";
    }
}

更新版本:

QList<QFile> filesList;

QFile file_1("path/to/file_1");
QFile file_2("path/to/file_2");

filesList.append(file_1);
filesList.append(file_2);

for(auto& file : filesList){
    if(!file.open(QIODevice::ReadOnly)){
        qDebug() << "file is not open.";
    }
}
uqcuzwp8

uqcuzwp82#

感谢@Fareanor注解,我通过为路径创建一个QString列表来解决这个问题,并且在打开文件时使用QFile:

QList<QString> filesList;

filesList.append("path/to/file_1");
filesList.append("path/to/file_2");

    for(auto& path : filesList){
        QFile file(path);
        if(!file.open(QIODevice::ReadOnly)){
            qDebug() << "file is not open.";
        }
}
yiytaume

yiytaume3#

为什么要创建QFile列表?也许您可以只存储QString路径,然后在需要时创建QFile

QVector<QString> filePathsList;
filePathsList << QStringLiteral("path/to/file_1"));
filePathsList << QStringLiteral("path/to/file_2"));

for (auto &filePath : qAsConst(filePathsList)) {
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << "file is not open.";
    }
}
o3imoua4

o3imoua44#

如果你想要QFile的QList,为什么不放置元素呢?。当它们可以被就地创建时,不需要在外部创建它们并复制它们:

QList<QFile> filesList;

filesList.emplaceBack(QString("path/to/file_1"));
filesList.emplaceBack(QString("path/to/file_2"));

for(auto& file : filesList){
    if(!file.open(QIODevice::ReadOnly)){
        qDebug() << "file is not open.";
    }
}

相关问题