Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
collectjson.cpp
Go to the documentation of this file.
1
// Copyright (C) 2018 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4
#
include
<
qfile
.
h
>
5
#
include
<
qjsonarray
.
h
>
6
#
include
<
qjsondocument
.
h
>
7
#
include
<
qjsonobject
.
h
>
8
#
include
<
qhashfunctions
.
h
>
9
#
include
<
qstringlist
.
h
>
10
#
include
<
cstdlib
>
11
12
static
bool
readFromFile
(QFile *device, QJsonArray *allMetaObjects)
13
{
14
const
QByteArray contents = device->readAll();
15
if
(contents.isEmpty()) {
16
fprintf(stderr,
"%s:0: metatypes input file is empty\n"
, qPrintable(device->fileName()));
17
return
false
;
18
}
19
20
QJsonParseError error {};
21
QJsonDocument metaObjects = QJsonDocument::fromJson(contents, &error);
22
if
(error.error != QJsonParseError::NoError) {
23
fprintf(stderr,
"%s:%d: %s\n"
, qPrintable(device->fileName()), error.offset,
24
qPrintable(error.errorString()));
25
return
false
;
26
}
27
28
allMetaObjects->append(metaObjects.object());
29
return
true
;
30
}
31
32
int
collectJson
(
const
QStringList &jsonFiles,
const
QString &outputFile,
bool
skipStdIn)
33
{
34
QHashSeed::setDeterministicGlobalSeed();
35
36
QFile
output;
37
if
(outputFile.isEmpty()) {
38
if
(!output.open(stdout, QIODevice::WriteOnly)) {
39
fprintf(stderr,
"Error opening stdout for writing: %s\n"
,
40
qPrintable(output.errorString()));
41
return
EXIT_FAILURE;
42
}
43
}
else
{
44
output.setFileName(outputFile);
45
if
(!output.open(QIODevice::WriteOnly)) {
46
fprintf(stderr,
"%s: Cannot open file for writing: %s\n"
, qPrintable(outputFile),
47
qPrintable(output.errorString()));
48
return
EXIT_FAILURE;
49
}
50
}
51
52
QJsonArray allMetaObjects;
53
if
(jsonFiles.isEmpty() && !skipStdIn) {
54
QFile
f;
55
if
(!f.open(stdin, QIODevice::ReadOnly)) {
56
fprintf(stderr,
"Error opening stdin for reading: %s\n"
, qPrintable(f.errorString()));
57
return
EXIT_FAILURE;
58
}
59
60
if
(!
readFromFile
(&f, &allMetaObjects))
61
return
EXIT_FAILURE;
62
}
63
64
QStringList jsonFilesSorted = jsonFiles;
65
jsonFilesSorted.sort();
66
for
(
const
QString &jsonFile : std::as_const(jsonFilesSorted)) {
67
QFile f(jsonFile);
68
if
(!f.open(QIODevice::ReadOnly)) {
69
fprintf(stderr,
"%s: Cannot open file for reading: %s\n"
, qPrintable(jsonFile),
70
qPrintable(f.errorString()));
71
return
EXIT_FAILURE;
72
}
73
74
if
(!readFromFile(&f, &allMetaObjects))
75
return
EXIT_FAILURE;
76
}
77
78
QJsonDocument
doc(allMetaObjects);
79
output.write(doc.toJson());
80
81
return
EXIT_SUCCESS;
82
}
QFile
Definition
qfile.h:71
QJsonDocument
\inmodule QtCore\reentrant
Definition
qjsondocument.h:29
readFromFile
static bool readFromFile(QFile *device, QJsonArray *allMetaObjects)
Definition
collectjson.cpp:12
collectJson
int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
Definition
collectjson.cpp:32
qtbase
src
tools
moc
collectjson.cpp
Generated on
for Qt by
1.18.0