QCommandLineOption читает входные файлы

Я работаю над кодом, использующим QCommandLineOption для чтения входных файлов (в данном случае jpg-файлов). Я пытаюсь обернуть голову, как правильно добавить путь к файлу & имена для доступа к данным, но это не работает. Вот код:

#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;
}

Я получаю «!! Маска НЕ ​​УСТАНОВЛЕНА и должна быть установлена!» при компиляции, что означает, что строка maskFileName пуста. Есть идеи ?

0

Решение

Ваша программа работает нормально. Я просто скомпилировал и попробовал, это работает.

Проблема в приведенных вами примерах аргументов:

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

Вам нужно удалить пробелы в -- mask, Так что измените на:

--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"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]