55 QHashSeed::setDeterministicGlobalSeed();
57 QCoreApplication app(argc, argv);
58 const QString version = QString::fromLatin1(qVersion());
59 QCoreApplication::setApplicationVersion(version);
66 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
67 parser.setApplicationDescription(u"Qt User Interface Compiler version %1"_s.arg(version));
68 parser.addHelpOption();
69 parser.addVersionOption();
72 dependenciesOption.setDescription(u"Display the dependencies."_s);
73 parser.addOption(dependenciesOption);
76 outputOption.setDescription(u"Place the output into <file>"_s);
77 outputOption.setValueName(u"file"_s);
78 parser.addOption(outputOption);
80 QCommandLineOption noAutoConnectionOption(QStringList{u"a"_s, u"no-autoconnection"_s});
81 noAutoConnectionOption.setDescription(u"Do not generate a call to QObject::connectSlotsByName()."_s);
82 parser.addOption(noAutoConnectionOption);
85 noProtOption.setDescription(u"Disable header protection."_s);
86 parser.addOption(noProtOption);
88 QCommandLineOption noImplicitIncludesOption(QStringList{u"n"_s, u"no-implicit-includes"_s});
89 noImplicitIncludesOption.setDescription(u"Disable generation of custom widget #include-directives."_s);
90 parser.addOption(noImplicitIncludesOption);
93 postfixOption.setDescription(u"Postfix to add to all generated classnames."_s);
94 postfixOption.setValueName(u"postfix"_s);
95 parser.addOption(postfixOption);
98 noQtNamespaceOption.setDescription(
99 u"Disable wrapping the definition of the generated class in QT_{BEGIN,END}_NAMESPACE."_s);
100 parser.addOption(noQtNamespaceOption);
103 translateOption.setDescription(u"Use <function> for i18n."_s);
104 translateOption.setValueName(u"function"_s);
105 parser.addOption(translateOption);
108 includeOption.setDescription(u"Add #include <include-file> to <file>."_s);
109 includeOption.setValueName(u"include-file"_s);
110 parser.addOption(includeOption);
113 generatorOption.setDescription(u"Select generator."_s);
114 generatorOption.setValueName(u"python|cpp"_s);
115 parser.addOption(generatorOption);
118 connectionsOption.setDescription(u"Connection syntax."_s);
119 connectionsOption.setValueName(u"pmf|string"_s);
120 parser.addOption(connectionsOption);
123 idBasedOption.setDescription(u"Use id based function for i18n"_s);
124 parser.addOption(idBasedOption);
127 fromImportsOption.setDescription(u"Python: generate imports relative to '.'"_s);
128 parser.addOption(fromImportsOption);
131 absoluteImportsOption.setDescription(u"Python: generate absolute imports"_s);
132 parser.addOption(absoluteImportsOption);
136 rcPrefixOption.setDescription(uR"(Python: Generate "rc_file" instead of "file_rc" import)"_s);
137 parser.addOption(rcPrefixOption);
141 useStarImportsOption.setDescription(u"Python: Use * imports"_s);
142 parser.addOption(useStarImportsOption);
145 pythonPathOption.setDescription(u"Python paths for --absolute-imports."_s);
146 pythonPathOption.setValueName(u"pathlist"_s);
147 parser.addOption(pythonPathOption);
149 parser.addPositionalArgument(u"[uifile]"_s, u"Input file (*.ui), otherwise stdin."_s);
153 driver.option().dependencies = parser.isSet(dependenciesOption);
154 driver.option().outputFile = parser.value(outputOption);
155 driver.option().autoConnection = !parser.isSet(noAutoConnectionOption);
156 driver.option().headerProtection = !parser.isSet(noProtOption);
157 driver.option().implicitIncludes = !parser.isSet(noImplicitIncludesOption);
158 driver.option().qtNamespace = !parser.isSet(noQtNamespaceOption);
159 driver.option().idBased = parser.isSet(idBasedOption);
160 driver.option().postfix = parser.value(postfixOption);
161 driver.option().translateFunction = parser.value(translateOption);
162 driver.option().includeFile = parser.value(includeOption);
163 if (parser.isSet(connectionsOption)) {
164 const auto value = parser.value(connectionsOption);
165 if (value ==
"pmf"_L1)
167 else if (value ==
"string"_L1)
171 const QString inputFile = parser.positionalArguments().value(0);
174 if (parser.isSet(generatorOption)) {
175 if (parser.value(generatorOption).compare(
"python"_L1) == 0)
180 if (parser.isSet(fromImportsOption))
182 else if (parser.isSet(absoluteImportsOption))
184 driver.option().useStarImports = parser.isSet(useStarImportsOption);
185 if (parser.isSet(rcPrefixOption))
188 if (parser.isSet(pythonPathOption))
189 pythonPaths = parser.value(pythonPathOption);
192 driver.option().pythonRoot = pythonRoot(pythonPaths, inputFile);
195 if (inputFile.isEmpty())
202 QTextStream *out =
nullptr;
204 if (!driver
.option().outputFile.isEmpty()) {
205 f.setFileName(driver.option().outputFile);
206 if (!f.open(QIODevice::WriteOnly | QFile::Text)) {
207 fprintf(stderr,
"Could not create output file\n");
210 out =
new QTextStream(&f);
211 out->setEncoding(QStringConverter::Utf8);
214 bool rtn = driver.uic(inputFile, out);
222 fprintf(stderr,
"File '%s' is not valid\n", inputFile.isEmpty() ?
"<stdin>" : inputFile.toLocal8Bit().constData());