117static void showHelp(QCommandLineParser &parser,
const QString &errorMessage = QString())
120 QTextStream str(&text);
121 str <<
"<html><head/><body>";
122 if (!errorMessage.isEmpty())
123 str <<
"<p>" << errorMessage <<
"</p>";
124 str <<
"<pre>" << parser.helpText().toHtmlEscaped() <<
"</pre></body></html>";
125 QMessageBox box(errorMessage.isEmpty() ? QMessageBox::Information : QMessageBox::Warning,
126 QGuiApplication::applicationDisplayName(), text,
128 box.setTextInteractionFlags(Qt::TextBrowserInteraction);
134 QString *errorMessage)
136 parser.setApplicationDescription(u"Qt Widgets Designer " QT_VERSION_STR
"\n\nUI designer for QWidget-based applications."_s);
137 const QCommandLineOption helpOption = parser.addHelpOption();
138 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
139 const QCommandLineOption localSocketClientOption(u"local-client"_s,
140 u"Local socket client mode"_s,
142 parser.addOption(localSocketClientOption);
143 const QCommandLineOption tcpServerOption(u"server"_s, u"TCP Server mode (deprecated)"_s);
144 parser.addOption(tcpServerOption);
145 const QCommandLineOption tcpClientOption(u"client"_s, u"TCP Client mode (deprecated)"_s,
147 parser.addOption(tcpClientOption);
148 const QCommandLineOption webHelpOption(u"web-help"_s, u"Use the Web documentation"_s);
149 parser.addOption(webHelpOption);
150 const QCommandLineOption pythonHelpOption(u"python-help"_s, u"Use the Python documentation"_s);
151 parser.addOption(pythonHelpOption);
152 const QCommandLineOption resourceDirOption(u"resourcedir"_s,
153 u"Resource directory"_s,
155 parser.addOption(resourceDirOption);
156 const QCommandLineOption internalDynamicPropertyOption(u"enableinternaldynamicproperties"_s,
157 u"Enable internal dynamic properties"_s);
158 parser.addOption(internalDynamicPropertyOption);
159 const QCommandLineOption pluginPathsOption(u"plugin-path"_s,
160 u"Default plugin path list"_s,
162 parser.addOption(pluginPathsOption);
164 const QCommandLineOption qtVersionOption(u"qt-version"_s,
165 u"Qt Version for writing .ui files"_s,
167 parser.addOption(qtVersionOption);
169 parser.addPositionalArgument(u"files"_s,
170 u"The UI files to open."_s);
172 if (!parser.parse(QCoreApplication::arguments())) {
173 *errorMessage = parser.errorText();
174 return QDesigner::ParseArgumentsError;
177 if (parser.isSet(helpOption))
178 return QDesigner::ParseArgumentsHelpRequested;
181 if (parser.isSet(u"help-all"_s))
182 parser.process(QCoreApplication::arguments());
183 options
->server = parser.isSet(tcpServerOption);
184 if (parser.isSet(localSocketClientOption)) {
185 options->localSocketServerName = parser.value(localSocketClientOption);
186 }
else if (parser.isSet(tcpClientOption)) {
188 options->tcpClientPort = parser.value(tcpClientOption).toUShort(&ok);
190 *errorMessage = u"Non-numeric argument specified for -client"_s;
191 return QDesigner::ParseArgumentsError;
194 if (parser.isSet(webHelpOption))
196 else if (parser.isSet(pythonHelpOption))
198 if (parser.isSet(resourceDirOption))
199 options->resourceDir = parser.value(resourceDirOption);
200 const auto pluginPathValues = parser.values(pluginPathsOption);
201 for (
const auto &pluginPath : pluginPathValues)
202 options->pluginPaths.append(pluginPath.split(QDir::listSeparator(), Qt::SkipEmptyParts));
204 if (parser.isSet(qtVersionOption))
205 options->qtVersion = QVersionNumber::fromString(parser.value(qtVersionOption));
208 options->files = parser.positionalArguments();
209 return QDesigner::ParseArgumentsSuccess;
214 QString errorMessage;
216 QCommandLineParser parser;
217 const ParseArgumentsResult result = parseDesignerCommandLineArguments(parser, &options, &errorMessage);
218 if (result != ParseArgumentsSuccess) {
219 showHelp(parser, errorMessage);
223 if (!options.localSocketServerName.isEmpty())
224 m_client =
new QDesignerLocalSocketClient(options.localSocketServerName,
this);
225 else if (options.tcpClientPort != 0)
226 m_client =
new QDesignerTcpClient(options.tcpClientPort,
this);
230 printf(
"%d\n", server->serverPort());
233 if (options.enableInternalDynamicProperties)
234 QDesignerPropertySheet::setInternalDynamicPropertiesEnabled(
true);
236 std::unique_ptr<QTranslator> designerTranslator(
new QTranslator(
this));
237 if (designerTranslator->load(QLocale(), u"designer"_s, u"_"_s, options.resourceDir)) {
238 installTranslator(designerTranslator.release());
239 std::unique_ptr<QTranslator> qtTranslator(
new QTranslator(
this));
240 if (qtTranslator->load(QLocale(), u"qt"_s, u"_"_s, options.resourceDir))
241 installTranslator(qtTranslator.release());
244 m_workbench =
new QDesignerWorkbench(options);
248 Q_ASSERT(previousMessageHandler);
252 for (
auto fileName : std::as_const(options.files)) {
254 const QFileInfo fi(fileName);
255 if (fi.exists() && fi.isRelative())
256 fileName = fi.absoluteFilePath();
257 m_workbench->readInForm(fileName);
261 suppressNewFormShow =
true;
263 if (options.qtVersion.has_value()) {
264#if QT_VERSION >= QT_VERSION_CHECK(6
, 9
, 0
)
265 m_workbench->core()->integration()->setQtVersion(options.qtVersion.value());
267 auto version = QVariant::fromValue(options.qtVersion.value());
268 m_workbench
->core()->integration()->setProperty(
"qtVersion", version);
273 if (m_initializationErrors.isEmpty()) {
277 showErrorMessageBox(m_initializationErrors);
278 m_initializationErrors.clear();