54 QHashSeed::setDeterministicGlobalSeed();
56 QCoreApplication app(argc, argv);
57 const QString version = QString::fromLatin1(qVersion());
58 QCoreApplication::setApplicationVersion(version);
65 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
66 parser.setApplicationDescription(u"Qt User Interface Compiler version %1"_s.arg(version));
67 parser.addHelpOption();
68 parser.addVersionOption();
71 dependenciesOption.setDescription(u"Display the dependencies."_s);
72 parser.addOption(dependenciesOption);
75 outputOption.setDescription(u"Place the output into <file>"_s);
76 outputOption.setValueName(u"file"_s);
77 parser.addOption(outputOption);
79 QCommandLineOption noAutoConnectionOption(QStringList{u"a"_s, u"no-autoconnection"_s});
80 noAutoConnectionOption.setDescription(u"Do not generate a call to QObject::connectSlotsByName()."_s);
81 parser.addOption(noAutoConnectionOption);
84 noProtOption.setDescription(u"Disable header protection."_s);
85 parser.addOption(noProtOption);
87 QCommandLineOption noImplicitIncludesOption(QStringList{u"n"_s, u"no-implicit-includes"_s});
88 noImplicitIncludesOption.setDescription(u"Disable generation of #include-directives."_s);
89 parser.addOption(noImplicitIncludesOption);
92 postfixOption.setDescription(u"Postfix to add to all generated classnames."_s);
93 postfixOption.setValueName(u"postfix"_s);
94 parser.addOption(postfixOption);
97 noQtNamespaceOption.setDescription(
98 u"Disable wrapping the definition of the generated class in QT_{BEGIN,END}_NAMESPACE."_s);
99 parser.addOption(noQtNamespaceOption);
102 translateOption.setDescription(u"Use <function> for i18n."_s);
103 translateOption.setValueName(u"function"_s);
104 parser.addOption(translateOption);
107 includeOption.setDescription(u"Add #include <include-file> to <file>."_s);
108 includeOption.setValueName(u"include-file"_s);
109 parser.addOption(includeOption);
112 generatorOption.setDescription(u"Select generator."_s);
113 generatorOption.setValueName(u"python|cpp"_s);
114 parser.addOption(generatorOption);
117 connectionsOption.setDescription(u"Connection syntax."_s);
118 connectionsOption.setValueName(u"pmf|string"_s);
119 parser.addOption(connectionsOption);
122 idBasedOption.setDescription(u"Use id based function for i18n"_s);
123 parser.addOption(idBasedOption);
126 fromImportsOption.setDescription(u"Python: generate imports relative to '.'"_s);
127 parser.addOption(fromImportsOption);
130 absoluteImportsOption.setDescription(u"Python: generate absolute imports"_s);
131 parser.addOption(absoluteImportsOption);
135 rcPrefixOption.setDescription(uR"(Python: Generate "rc_file" instead of "file_rc" import)"_s);
136 parser.addOption(rcPrefixOption);
140 useStarImportsOption.setDescription(u"Python: Use * imports"_s);
141 parser.addOption(useStarImportsOption);
144 pythonPathOption.setDescription(u"Python paths for --absolute-imports."_s);
145 pythonPathOption.setValueName(u"pathlist"_s);
146 parser.addOption(pythonPathOption);
148 parser.addPositionalArgument(u"[uifile]"_s, u"Input file (*.ui), otherwise stdin."_s);
152 driver.option().dependencies = parser.isSet(dependenciesOption);
153 driver.option().outputFile = parser.value(outputOption);
154 driver.option().autoConnection = !parser.isSet(noAutoConnectionOption);
155 driver.option().headerProtection = !parser.isSet(noProtOption);
156 driver.option().implicitIncludes = !parser.isSet(noImplicitIncludesOption);
157 driver.option().qtNamespace = !parser.isSet(noQtNamespaceOption);
158 driver.option().idBased = parser.isSet(idBasedOption);
159 driver.option().postfix = parser.value(postfixOption);
160 driver.option().translateFunction = parser.value(translateOption);
161 driver.option().includeFile = parser.value(includeOption);
162 if (parser.isSet(connectionsOption)) {
163 const auto value = parser.value(connectionsOption);
164 if (value ==
"pmf"_L1)
166 else if (value ==
"string"_L1)
170 const QString inputFile = parser.positionalArguments().value(0);
173 if (parser.isSet(generatorOption)) {
174 if (parser.value(generatorOption).compare(
"python"_L1) == 0)
179 if (parser.isSet(fromImportsOption))
181 else if (parser.isSet(absoluteImportsOption))
183 driver.option().useStarImports = parser.isSet(useStarImportsOption);
184 if (parser.isSet(rcPrefixOption))
187 if (parser.isSet(pythonPathOption))
188 pythonPaths = parser.value(pythonPathOption);
191 driver.option().pythonRoot = pythonRoot(pythonPaths, inputFile);
194 if (inputFile.isEmpty())
201 QTextStream *out =
nullptr;
203 if (!driver
.option().outputFile.isEmpty()) {
204 f.setFileName(driver.option().outputFile);
205 if (!f.open(QIODevice::WriteOnly | QFile::Text)) {
206 fprintf(stderr,
"Could not create output file\n");
209 out =
new QTextStream(&f);
210 out->setEncoding(QStringConverter::Utf8);
213 bool rtn = driver.uic(inputFile, out);
221 fprintf(stderr,
"File '%s' is not valid\n", inputFile.isEmpty() ?
"<stdin>" : inputFile.toLocal8Bit().constData());