forked from qt-creator/qt-creator
CommandLine: Add a c'tor accepting a list of various types
Make it possible to pass a list of a mixture of QStrings and QStringLists for command line's "args" argument. Change-Id: Iafe3249f074b9568537e72a80e46ec4ed143014a Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -1425,6 +1425,19 @@ CommandLine::CommandLine(const FilePath &exe, const QStringList &args)
|
|||||||
addArgs(args);
|
addArgs(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CommandLine::CommandLine(const FilePath &exe, std::initializer_list<ArgRef> args)
|
||||||
|
: m_executable(exe)
|
||||||
|
{
|
||||||
|
for (const ArgRef &arg : args) {
|
||||||
|
if (const auto ptr = std::get_if<const char *>(&arg.m_arg))
|
||||||
|
addArg(QString::fromUtf8(*ptr));
|
||||||
|
else if (const auto ptr = std::get_if<std::reference_wrapper<const QString>>(&arg.m_arg))
|
||||||
|
addArg(*ptr);
|
||||||
|
else if (const auto ptr = std::get_if<std::reference_wrapper<const QStringList>>(&arg.m_arg))
|
||||||
|
addArgs(*ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CommandLine::CommandLine(const FilePath &exe, const QStringList &args, OsType osType)
|
CommandLine::CommandLine(const FilePath &exe, const QStringList &args, OsType osType)
|
||||||
: m_executable(exe)
|
: m_executable(exe)
|
||||||
{
|
{
|
||||||
|
@@ -11,6 +11,8 @@
|
|||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
#include <variant>
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
|
||||||
class AbstractMacroExpander;
|
class AbstractMacroExpander;
|
||||||
@@ -120,8 +122,22 @@ public:
|
|||||||
CommandLine();
|
CommandLine();
|
||||||
~CommandLine();
|
~CommandLine();
|
||||||
|
|
||||||
|
struct ArgRef
|
||||||
|
{
|
||||||
|
ArgRef(const char *arg) : m_arg(arg) {}
|
||||||
|
ArgRef(const QString &arg) : m_arg(arg) {}
|
||||||
|
ArgRef(const QStringList &args) : m_arg(args) {}
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class CommandLine;
|
||||||
|
const std::variant<const char *,
|
||||||
|
std::reference_wrapper<const QString>,
|
||||||
|
std::reference_wrapper<const QStringList>> m_arg;
|
||||||
|
};
|
||||||
|
|
||||||
explicit CommandLine(const FilePath &executable);
|
explicit CommandLine(const FilePath &executable);
|
||||||
CommandLine(const FilePath &exe, const QStringList &args);
|
CommandLine(const FilePath &exe, const QStringList &args);
|
||||||
|
CommandLine(const FilePath &exe, std::initializer_list<ArgRef> args);
|
||||||
CommandLine(const FilePath &exe, const QStringList &args, OsType osType);
|
CommandLine(const FilePath &exe, const QStringList &args, OsType osType);
|
||||||
CommandLine(const FilePath &exe, const QString &unparsedArgs, RawType);
|
CommandLine(const FilePath &exe, const QString &unparsedArgs, RawType);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user