QCommandLineOption读取输入文件

QCommandLineOption reading input files

本文关键字:文件 输入 读取 QCommandLineOption      更新时间:2023-10-16

我正在编写一个使用QCommandLineOption读取输入文件(在本例中为jpg文件)的代码。我正试着思考如何正确地添加filepath&名称以访问数据,但它不起作用。这是代码:

#include <iostream>
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QString>
#include <QImage>
#include "imageconvert.h"
#include "clanu_process.h"
//--input=/Users/fakepath/coming-soon.jpg --     mask=/Users/fakepath/coming-soon_mask.jpg --output=/Users/fakepath/coming-soon_out_IFQ1.jpg
int main(int argc, char *argv[])
 {
    // ------------------------------------------
    //Command line parameters management
    QCoreApplication app(argc, argv);
    QCoreApplication::setApplicationName("clanu-inpainting");
    QCoreApplication::setApplicationVersion("1.0");
    QCommandLineParser parser;
    parser.setApplicationDescription("Inpainting Console");
    parser.addHelpOption();
    parser.addVersionOption();
    QCommandLineOption inputFileOption(QStringList() << "i" << "input", "Fullpath and extension of the input <file>.", "file");
    parser.addOption(inputFileOption);
    QCommandLineOption maskFileOption(QStringList() << "m" << "mask", "Fullpath and extension of the mask <file>.", "file");
    parser.addOption(maskFileOption);
    QCommandLineOption outputFileOption(QStringList() << "o" << "output", "Fullpath and extension of the output <file>.", "file");
    parser.addOption(outputFileOption);
    // Process the actual command line arguments given by the user
    parser.process(app);
    QString inputFileName  = parser.value(inputFileOption);
    QString maskFileName   = parser.value(maskFileOption);
    QString outputFileName = parser.value(outputFileOption);
    std::cout << " input  " << inputFileName.toStdString()  <<  std::endl;
    std::cout << " output " << outputFileName.toStdString() <<  std::endl;
    std::cout << " mask   " << maskFileName.toStdString()   <<  std::endl;
    if(   maskFileName.isEmpty() ) { std::cout << "!! Mask is NOT SET and must be set!"   << std::endl; return -1; }
    if(  inputFileName.isEmpty() ) { std::cout << "!! Input is NOT SET and must be set!"  << std::endl; return -1; }
    if( outputFileName.isEmpty() ) { std::cout << "!! Output is NOT SET and must be set!" << std::endl; return -1; }
    std::cout << " - Input image file read : " << inputFileName.toStdString() << std::endl;
    std::cout << " - Mask image file read  : " << maskFileName.toStdString() << std::endl;
    std::cout << " - Output image file     : " << outputFileName.toStdString() << std::endl;
    // ------------------------------------------
return 0;
}

编译时我得到"!!Mask未设置,必须设置!",这意味着字符串maskFileName为空。有什么想法吗?

您的程序运行良好。我只是编译了它并尝试过,它很有效。

问题出在你给出的示例参数上:

--input=/Users/fakepath/coming-soon.jpg --     mask=/Users/fakepath/coming-soon_mask.jpg --output=/Users/fakepath/coming-soon_out_IFQ1.jpg

您需要删除-- mask中的空格。因此,将ti更改为:

--input=/Users/fakepath/coming-soon.jpg --mask=/Users/fakepath/coming-soon_mask.jpg --output=/Users/fakepath/coming-soon_out_IFQ1.jpg

顺便说一句,在处理文件路径时,最好用双引号将它们括起来,以便在路径中留出空格:

--input="/Users/fakepath/coming soon.jpg" --mask="/Users/fakepath/coming soon mask.jpg" --output="/Users/fakepath/coming soon out IFQ1.jpg"