mirror of
https://github.com/miurahr/aqtinstall.git
synced 2025-12-18 13:14:37 +03:00
chore(ci): avoid zipped resources from repository (#895)
Some checks are pending
Check tox tests / Check packaging 📦 (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / Build package (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / publish Python 🐍 distributions 📦 to PyPI (push) Blocked by required conditions
Test on GH actions environment / test (binary, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.0) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.1) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.7.3) (push) Waiting to run
Some checks are pending
Check tox tests / Check packaging 📦 (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / Build package (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / publish Python 🐍 distributions 📦 to PyPI (push) Blocked by required conditions
Test on GH actions environment / test (binary, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.0) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.1) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.7.3) (push) Waiting to run
* chore(ci): expand test sources - Avoid zip archive from repository for security Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): download jom from official repository Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): revert jom to 1.1.3 Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): update md5 checks Signed-off-by: Hiroshi Miura <miurahr@linux.com> --------- Signed-off-by: Hiroshi Miura <miurahr@linux.com>
This commit is contained in:
Binary file not shown.
10
ci/accelbubble/Bluebubble.svg
Normal file
10
ci/accelbubble/Bluebubble.svg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny">
|
||||||
|
<defs>
|
||||||
|
<radialGradient id="grad1" cx="0.5" cy="0.7" r="0.7" fx="0.5" fy="0.4">
|
||||||
|
<stop offset="0" style="stop-color:rgb(255,255,255)" />
|
||||||
|
<stop offset="1.5" style="stop-color:rgb(0,102,153)" />
|
||||||
|
</radialGradient>
|
||||||
|
</defs>
|
||||||
|
<circle cx="100" cy="80" r="42" fill="url(#grad1)"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 399 B |
60
ci/accelbubble/Bubble.qml
Normal file
60
ci/accelbubble/Bubble.qml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Controls 2.2
|
||||||
|
|
||||||
|
Image {
|
||||||
|
source: "Bluebubble.svg"
|
||||||
|
smooth: true
|
||||||
|
property real centerX
|
||||||
|
property real centerY
|
||||||
|
property real bubbleCenter
|
||||||
|
}
|
||||||
34
ci/accelbubble/Info.plist
Normal file
34
ci/accelbubble/Info.plist
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>accelbubble</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>accelbubble</string>
|
||||||
|
<key>CFBundleGetInfoString</key>
|
||||||
|
<string>Created by Qt/QMake</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.digia.accelbubble</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>accelbubble</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>NOTE</key>
|
||||||
|
<string>This file was generated by Qt/QMake.</string>
|
||||||
|
<key>UILaunchStoryboardName</key>
|
||||||
|
<string>LaunchScreen</string>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
74
ci/accelbubble/Page1Form.ui.qml
Normal file
74
ci/accelbubble/Page1Form.ui.qml
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Controls 2.2
|
||||||
|
|
||||||
|
Page {
|
||||||
|
width: 600
|
||||||
|
height: 400
|
||||||
|
property alias bubble: bubble
|
||||||
|
property alias mainWindow: mainWindow
|
||||||
|
|
||||||
|
header: Label {
|
||||||
|
text: qsTr("Page 1")
|
||||||
|
font.pixelSize: Qt.application.font.pixelSize * 2
|
||||||
|
padding: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: mainWindow
|
||||||
|
color: "#ffffff"
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Bubble {
|
||||||
|
id: bubble
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
67
ci/accelbubble/Page2Form.ui.qml
Normal file
67
ci/accelbubble/Page2Form.ui.qml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Controls 2.2
|
||||||
|
|
||||||
|
Page {
|
||||||
|
width: 600
|
||||||
|
height: 400
|
||||||
|
|
||||||
|
header: Label {
|
||||||
|
text: qsTr("Page 2")
|
||||||
|
font.pixelSize: Qt.application.font.pixelSize * 2
|
||||||
|
padding: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: qsTr("You are on Page 2.")
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
37
ci/accelbubble/accelbubble.pro
Normal file
37
ci/accelbubble/accelbubble.pro
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
QT += quick svg xml
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any feature of Qt which as been marked deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
# You can also make your code fail to compile if you use deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
SOURCES += main.cpp
|
||||||
|
|
||||||
|
RESOURCES += qml.qrc
|
||||||
|
|
||||||
|
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||||
|
QML_IMPORT_PATH =
|
||||||
|
|
||||||
|
# Additional import path used to resolve QML modules just for Qt Quick Designer
|
||||||
|
QML_DESIGNER_IMPORT_PATH =
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
ios {
|
||||||
|
QTPLUGIN += qsvg qsvgicon qtsensors_ios
|
||||||
|
QMAKE_INFO_PLIST = Info.plist
|
||||||
|
}
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
Bluebubble.svg
|
||||||
66
ci/accelbubble/main.cpp
Normal file
66
ci/accelbubble/main.cpp
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QQmlApplicationEngine>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
|
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
QQmlApplicationEngine engine;
|
||||||
|
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
||||||
|
if (engine.rootObjects().isEmpty())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
141
ci/accelbubble/main.qml
Normal file
141
ci/accelbubble/main.qml
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Controls 2.2
|
||||||
|
import QtSensors 5.9
|
||||||
|
|
||||||
|
ApplicationWindow {
|
||||||
|
visible: true
|
||||||
|
width: 640
|
||||||
|
height: 480
|
||||||
|
title: qsTr("Accelerate Bubble")
|
||||||
|
|
||||||
|
SwipeView {
|
||||||
|
id: swipeView
|
||||||
|
anchors.fill: parent
|
||||||
|
currentIndex: tabBar.currentIndex
|
||||||
|
|
||||||
|
Page1Form {
|
||||||
|
bubble {
|
||||||
|
id: bubble
|
||||||
|
centerX: mainWindow.width / 2
|
||||||
|
centerY: mainWindow.height / 2
|
||||||
|
bubbleCenter: bubble.width / 2
|
||||||
|
x: bubble.centerX - bubble.bubbleCenter
|
||||||
|
y: bubble.centerY - bubble.bubbleCenter
|
||||||
|
|
||||||
|
Behavior on y {
|
||||||
|
SmoothedAnimation {
|
||||||
|
easing.type: Easing.Linear
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Behavior on x {
|
||||||
|
SmoothedAnimation {
|
||||||
|
easing.type: Easing.Linear
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Page2Form {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
footer: TabBar {
|
||||||
|
id: tabBar
|
||||||
|
currentIndex: swipeView.currentIndex
|
||||||
|
|
||||||
|
TabButton {
|
||||||
|
text: qsTr("Page 1")
|
||||||
|
}
|
||||||
|
TabButton {
|
||||||
|
text: qsTr("Page 2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Accelerometer {
|
||||||
|
id: accel
|
||||||
|
dataRate: 100
|
||||||
|
active: true
|
||||||
|
|
||||||
|
onReadingChanged: {
|
||||||
|
var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||||
|
var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||||
|
|
||||||
|
if (isNaN(newX) || isNaN(newY))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (newX < 0)
|
||||||
|
newX = 0
|
||||||
|
|
||||||
|
if (newX > mainWindow.width - bubble.width)
|
||||||
|
newX = mainWindow.width - bubble.width
|
||||||
|
|
||||||
|
if (newY < 18)
|
||||||
|
newY = 18
|
||||||
|
|
||||||
|
if (newY > mainWindow.height - bubble.height)
|
||||||
|
newY = mainWindow.height - bubble.height
|
||||||
|
|
||||||
|
bubble.x = newX
|
||||||
|
bubble.y = newY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function calcPitch(x, y, z) {
|
||||||
|
return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
|
||||||
|
}
|
||||||
|
function calcRoll(x, y, z) {
|
||||||
|
return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
|
||||||
|
}
|
||||||
|
}
|
||||||
10
ci/accelbubble/qml.qrc
Normal file
10
ci/accelbubble/qml.qrc
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>Page1Form.ui.qml</file>
|
||||||
|
<file>Page2Form.ui.qml</file>
|
||||||
|
<file>qtquickcontrols2.conf</file>
|
||||||
|
<file>Bubble.qml</file>
|
||||||
|
<file>Bluebubble.svg</file>
|
||||||
|
<file>main.qml</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
6
ci/accelbubble/qtquickcontrols2.conf
Normal file
6
ci/accelbubble/qtquickcontrols2.conf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
; This file can be edited to change the style of the application
|
||||||
|
; Read "Qt Quick Controls 2 Configuration File" for details:
|
||||||
|
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
||||||
|
|
||||||
|
[Controls]
|
||||||
|
Style=Default
|
||||||
BIN
ci/helloworld.7z
BIN
ci/helloworld.7z
Binary file not shown.
9
ci/helloworld/hello.pro
Normal file
9
ci/helloworld/hello.pro
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
QT += core gui
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
TARGET = Hello
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
SOURCES += main.cpp
|
||||||
|
|
||||||
12
ci/helloworld/main.cpp
Normal file
12
ci/helloworld/main.cpp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#include <QApplication>
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app (argc, argv);
|
||||||
|
|
||||||
|
QPushButton button ("Hello world !");
|
||||||
|
button.show();
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
Binary file not shown.
7
ci/helloworld_qttools/hello.pro
Normal file
7
ci/helloworld_qttools/hello.pro
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
QT += uitools
|
||||||
|
|
||||||
|
TARGET = Hello
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
SOURCES += main.cpp
|
||||||
|
|
||||||
13
ci/helloworld_qttools/main.cpp
Normal file
13
ci/helloworld_qttools/main.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include <QtUiTools>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app (argc, argv);
|
||||||
|
QUiLoader loader;
|
||||||
|
QPushButton button ("Hello world !");
|
||||||
|
button.show();
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
BIN
ci/jom_1_1_3.zip
BIN
ci/jom_1_1_3.zip
Binary file not shown.
Binary file not shown.
34
ci/openglwindow/CMakeLists.txt
Normal file
34
ci/openglwindow/CMakeLists.txt
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
project(openglwindow LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|
||||||
|
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
||||||
|
set(INSTALL_EXAMPLESDIR "examples")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/openglwindow")
|
||||||
|
|
||||||
|
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
|
||||||
|
|
||||||
|
qt_add_executable(openglwindow
|
||||||
|
main.cpp
|
||||||
|
openglwindow.cpp openglwindow.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(openglwindow PROPERTIES
|
||||||
|
WIN32_EXECUTABLE TRUE
|
||||||
|
MACOSX_BUNDLE TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(openglwindow PUBLIC
|
||||||
|
Qt::Core
|
||||||
|
Qt::Gui
|
||||||
|
Qt::OpenGL
|
||||||
|
)
|
||||||
|
|
||||||
|
install(TARGETS openglwindow
|
||||||
|
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||||
|
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||||
|
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||||
|
)
|
||||||
130
ci/openglwindow/main.cpp
Normal file
130
ci/openglwindow/main.cpp
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
// Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||||
|
|
||||||
|
#include "openglwindow.h"
|
||||||
|
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QMatrix4x4>
|
||||||
|
#include <QOpenGLShaderProgram>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QtMath>
|
||||||
|
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
class TriangleWindow : public OpenGLWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using OpenGLWindow::OpenGLWindow;
|
||||||
|
|
||||||
|
void initialize() override;
|
||||||
|
void render() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLint m_posAttr = 0;
|
||||||
|
GLint m_colAttr = 0;
|
||||||
|
GLint m_matrixUniform = 0;
|
||||||
|
|
||||||
|
QOpenGLShaderProgram *m_program = nullptr;
|
||||||
|
int m_frame = 0;
|
||||||
|
};
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
QSurfaceFormat format;
|
||||||
|
format.setSamples(16);
|
||||||
|
|
||||||
|
TriangleWindow window;
|
||||||
|
window.setFormat(format);
|
||||||
|
window.resize(640, 480);
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
window.setAnimating(true);
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
static const char *vertexShaderSource =
|
||||||
|
"attribute highp vec4 posAttr;\n"
|
||||||
|
"attribute lowp vec4 colAttr;\n"
|
||||||
|
"varying lowp vec4 col;\n"
|
||||||
|
"uniform highp mat4 matrix;\n"
|
||||||
|
"void main() {\n"
|
||||||
|
" col = colAttr;\n"
|
||||||
|
" gl_Position = matrix * posAttr;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
static const char *fragmentShaderSource =
|
||||||
|
"varying lowp vec4 col;\n"
|
||||||
|
"void main() {\n"
|
||||||
|
" gl_FragColor = col;\n"
|
||||||
|
"}\n";
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
void TriangleWindow::initialize()
|
||||||
|
{
|
||||||
|
m_program = new QOpenGLShaderProgram(this);
|
||||||
|
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||||
|
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||||
|
m_program->link();
|
||||||
|
m_posAttr = m_program->attributeLocation("posAttr");
|
||||||
|
Q_ASSERT(m_posAttr != -1);
|
||||||
|
m_colAttr = m_program->attributeLocation("colAttr");
|
||||||
|
Q_ASSERT(m_colAttr != -1);
|
||||||
|
m_matrixUniform = m_program->uniformLocation("matrix");
|
||||||
|
Q_ASSERT(m_matrixUniform != -1);
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
//! [5]
|
||||||
|
void TriangleWindow::render()
|
||||||
|
{
|
||||||
|
const qreal retinaScale = devicePixelRatio();
|
||||||
|
glViewport(0, 0, width() * retinaScale, height() * retinaScale);
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
m_program->bind();
|
||||||
|
|
||||||
|
QMatrix4x4 matrix;
|
||||||
|
matrix.perspective(60.0f, 4.0f / 3.0f, 0.1f, 100.0f);
|
||||||
|
matrix.translate(0, 0, -2);
|
||||||
|
matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);
|
||||||
|
|
||||||
|
m_program->setUniformValue(m_matrixUniform, matrix);
|
||||||
|
|
||||||
|
static const GLfloat vertices[] = {
|
||||||
|
0.0f, 0.707f,
|
||||||
|
-0.5f, -0.5f,
|
||||||
|
0.5f, -0.5f
|
||||||
|
};
|
||||||
|
|
||||||
|
static const GLfloat colors[] = {
|
||||||
|
1.0f, 0.0f, 0.0f,
|
||||||
|
0.0f, 1.0f, 0.0f,
|
||||||
|
0.0f, 0.0f, 1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
||||||
|
glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors);
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(m_posAttr);
|
||||||
|
glEnableVertexAttribArray(m_colAttr);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|
||||||
|
glDisableVertexAttribArray(m_colAttr);
|
||||||
|
glDisableVertexAttribArray(m_posAttr);
|
||||||
|
|
||||||
|
m_program->release();
|
||||||
|
|
||||||
|
++m_frame;
|
||||||
|
}
|
||||||
|
//! [5]
|
||||||
114
ci/openglwindow/openglwindow.cpp
Normal file
114
ci/openglwindow/openglwindow.cpp
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
// Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||||
|
|
||||||
|
#include "openglwindow.h"
|
||||||
|
|
||||||
|
#include <QOpenGLContext>
|
||||||
|
#include <QOpenGLPaintDevice>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
OpenGLWindow::OpenGLWindow(QWindow *parent)
|
||||||
|
: QWindow(parent)
|
||||||
|
{
|
||||||
|
setSurfaceType(QWindow::OpenGLSurface);
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
OpenGLWindow::~OpenGLWindow()
|
||||||
|
{
|
||||||
|
delete m_device;
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
void OpenGLWindow::render(QPainter *painter)
|
||||||
|
{
|
||||||
|
Q_UNUSED(painter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::initialize()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::render()
|
||||||
|
{
|
||||||
|
if (!m_device)
|
||||||
|
m_device = new QOpenGLPaintDevice;
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
|
m_device->setSize(size() * devicePixelRatio());
|
||||||
|
m_device->setDevicePixelRatio(devicePixelRatio());
|
||||||
|
|
||||||
|
QPainter painter(m_device);
|
||||||
|
render(&painter);
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
void OpenGLWindow::renderLater()
|
||||||
|
{
|
||||||
|
requestUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLWindow::event(QEvent *event)
|
||||||
|
{
|
||||||
|
switch (event->type()) {
|
||||||
|
case QEvent::UpdateRequest:
|
||||||
|
renderNow();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return QWindow::event(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::exposeEvent(QExposeEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
|
||||||
|
if (isExposed())
|
||||||
|
renderNow();
|
||||||
|
}
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
void OpenGLWindow::renderNow()
|
||||||
|
{
|
||||||
|
if (!isExposed())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool needsInitialize = false;
|
||||||
|
|
||||||
|
if (!m_context) {
|
||||||
|
m_context = new QOpenGLContext(this);
|
||||||
|
m_context->setFormat(requestedFormat());
|
||||||
|
m_context->create();
|
||||||
|
|
||||||
|
needsInitialize = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_context->makeCurrent(this);
|
||||||
|
|
||||||
|
if (needsInitialize) {
|
||||||
|
initializeOpenGLFunctions();
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
render();
|
||||||
|
|
||||||
|
m_context->swapBuffers(this);
|
||||||
|
|
||||||
|
if (m_animating)
|
||||||
|
renderLater();
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
//! [5]
|
||||||
|
void OpenGLWindow::setAnimating(bool animating)
|
||||||
|
{
|
||||||
|
m_animating = animating;
|
||||||
|
|
||||||
|
if (animating)
|
||||||
|
renderLater();
|
||||||
|
}
|
||||||
|
//! [5]
|
||||||
|
|
||||||
44
ci/openglwindow/openglwindow.h
Normal file
44
ci/openglwindow/openglwindow.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
// Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||||
|
|
||||||
|
#include <QWindow>
|
||||||
|
#include <QOpenGLFunctions>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QPainter;
|
||||||
|
class QOpenGLContext;
|
||||||
|
class QOpenGLPaintDevice;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
class OpenGLWindow : public QWindow, protected QOpenGLFunctions
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit OpenGLWindow(QWindow *parent = nullptr);
|
||||||
|
~OpenGLWindow();
|
||||||
|
|
||||||
|
virtual void render(QPainter *painter);
|
||||||
|
virtual void render();
|
||||||
|
|
||||||
|
virtual void initialize();
|
||||||
|
|
||||||
|
void setAnimating(bool animating);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void renderLater();
|
||||||
|
void renderNow();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *event) override;
|
||||||
|
|
||||||
|
void exposeEvent(QExposeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_animating = false;
|
||||||
|
|
||||||
|
QOpenGLContext *m_context = nullptr;
|
||||||
|
QOpenGLPaintDevice *m_device = nullptr;
|
||||||
|
};
|
||||||
|
//! [1]
|
||||||
|
|
||||||
4
ci/openglwindow/openglwindow.pri
Normal file
4
ci/openglwindow/openglwindow.pri
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
QT += opengl
|
||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
SOURCES += $$PWD/openglwindow.cpp
|
||||||
|
HEADERS += $$PWD/openglwindow.h
|
||||||
7
ci/openglwindow/openglwindow.pro
Normal file
7
ci/openglwindow/openglwindow.pro
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
include(openglwindow.pri)
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp
|
||||||
|
|
||||||
|
target.path = $$[QT_INSTALL_EXAMPLES]/opengl/openglwindow
|
||||||
|
INSTALLS += target
|
||||||
180
ci/openglwindow_qt5/main.cpp
Normal file
180
ci/openglwindow_qt5/main.cpp
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "openglwindow.h"
|
||||||
|
|
||||||
|
#include <QtGui/QGuiApplication>
|
||||||
|
#include <QtGui/QMatrix4x4>
|
||||||
|
#include <QtGui/QOpenGLShaderProgram>
|
||||||
|
#include <QtGui/QScreen>
|
||||||
|
|
||||||
|
#include <QtCore/qmath.h>
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
class TriangleWindow : public OpenGLWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TriangleWindow();
|
||||||
|
|
||||||
|
void initialize() override;
|
||||||
|
void render() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLuint m_posAttr;
|
||||||
|
GLuint m_colAttr;
|
||||||
|
GLuint m_matrixUniform;
|
||||||
|
|
||||||
|
QOpenGLShaderProgram *m_program;
|
||||||
|
int m_frame;
|
||||||
|
};
|
||||||
|
|
||||||
|
TriangleWindow::TriangleWindow()
|
||||||
|
: m_program(0)
|
||||||
|
, m_frame(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
QSurfaceFormat format;
|
||||||
|
format.setSamples(16);
|
||||||
|
|
||||||
|
TriangleWindow window;
|
||||||
|
window.setFormat(format);
|
||||||
|
window.resize(640, 480);
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
window.setAnimating(true);
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
static const char *vertexShaderSource =
|
||||||
|
"attribute highp vec4 posAttr;\n"
|
||||||
|
"attribute lowp vec4 colAttr;\n"
|
||||||
|
"varying lowp vec4 col;\n"
|
||||||
|
"uniform highp mat4 matrix;\n"
|
||||||
|
"void main() {\n"
|
||||||
|
" col = colAttr;\n"
|
||||||
|
" gl_Position = matrix * posAttr;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
static const char *fragmentShaderSource =
|
||||||
|
"varying lowp vec4 col;\n"
|
||||||
|
"void main() {\n"
|
||||||
|
" gl_FragColor = col;\n"
|
||||||
|
"}\n";
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
void TriangleWindow::initialize()
|
||||||
|
{
|
||||||
|
m_program = new QOpenGLShaderProgram(this);
|
||||||
|
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||||
|
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||||
|
m_program->link();
|
||||||
|
m_posAttr = m_program->attributeLocation("posAttr");
|
||||||
|
m_colAttr = m_program->attributeLocation("colAttr");
|
||||||
|
m_matrixUniform = m_program->uniformLocation("matrix");
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
//! [5]
|
||||||
|
void TriangleWindow::render()
|
||||||
|
{
|
||||||
|
const qreal retinaScale = devicePixelRatio();
|
||||||
|
glViewport(0, 0, width() * retinaScale, height() * retinaScale);
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
m_program->bind();
|
||||||
|
|
||||||
|
QMatrix4x4 matrix;
|
||||||
|
matrix.perspective(60.0f, 4.0f/3.0f, 0.1f, 100.0f);
|
||||||
|
matrix.translate(0, 0, -2);
|
||||||
|
matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);
|
||||||
|
|
||||||
|
m_program->setUniformValue(m_matrixUniform, matrix);
|
||||||
|
|
||||||
|
GLfloat vertices[] = {
|
||||||
|
0.0f, 0.707f,
|
||||||
|
-0.5f, -0.5f,
|
||||||
|
0.5f, -0.5f
|
||||||
|
};
|
||||||
|
|
||||||
|
GLfloat colors[] = {
|
||||||
|
1.0f, 0.0f, 0.0f,
|
||||||
|
0.0f, 1.0f, 0.0f,
|
||||||
|
0.0f, 0.0f, 1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
||||||
|
glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors);
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|
||||||
|
glDisableVertexAttribArray(1);
|
||||||
|
glDisableVertexAttribArray(0);
|
||||||
|
|
||||||
|
m_program->release();
|
||||||
|
|
||||||
|
++m_frame;
|
||||||
|
}
|
||||||
|
//! [5]
|
||||||
166
ci/openglwindow_qt5/openglwindow.cpp
Normal file
166
ci/openglwindow_qt5/openglwindow.cpp
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "openglwindow.h"
|
||||||
|
|
||||||
|
#include <QtCore/QCoreApplication>
|
||||||
|
|
||||||
|
#include <QtGui/QOpenGLContext>
|
||||||
|
#include <QtGui/QOpenGLPaintDevice>
|
||||||
|
#include <QtGui/QPainter>
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
OpenGLWindow::OpenGLWindow(QWindow *parent)
|
||||||
|
: QWindow(parent)
|
||||||
|
, m_animating(false)
|
||||||
|
, m_context(0)
|
||||||
|
, m_device(0)
|
||||||
|
{
|
||||||
|
setSurfaceType(QWindow::OpenGLSurface);
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
OpenGLWindow::~OpenGLWindow()
|
||||||
|
{
|
||||||
|
delete m_device;
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
void OpenGLWindow::render(QPainter *painter)
|
||||||
|
{
|
||||||
|
Q_UNUSED(painter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::initialize()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::render()
|
||||||
|
{
|
||||||
|
if (!m_device)
|
||||||
|
m_device = new QOpenGLPaintDevice;
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
|
m_device->setSize(size() * devicePixelRatio());
|
||||||
|
m_device->setDevicePixelRatio(devicePixelRatio());
|
||||||
|
|
||||||
|
QPainter painter(m_device);
|
||||||
|
render(&painter);
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
void OpenGLWindow::renderLater()
|
||||||
|
{
|
||||||
|
requestUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLWindow::event(QEvent *event)
|
||||||
|
{
|
||||||
|
switch (event->type()) {
|
||||||
|
case QEvent::UpdateRequest:
|
||||||
|
renderNow();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return QWindow::event(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::exposeEvent(QExposeEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
|
||||||
|
if (isExposed())
|
||||||
|
renderNow();
|
||||||
|
}
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
void OpenGLWindow::renderNow()
|
||||||
|
{
|
||||||
|
if (!isExposed())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool needsInitialize = false;
|
||||||
|
|
||||||
|
if (!m_context) {
|
||||||
|
m_context = new QOpenGLContext(this);
|
||||||
|
m_context->setFormat(requestedFormat());
|
||||||
|
m_context->create();
|
||||||
|
|
||||||
|
needsInitialize = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_context->makeCurrent(this);
|
||||||
|
|
||||||
|
if (needsInitialize) {
|
||||||
|
initializeOpenGLFunctions();
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
render();
|
||||||
|
|
||||||
|
m_context->swapBuffers(this);
|
||||||
|
|
||||||
|
if (m_animating)
|
||||||
|
renderLater();
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
//! [5]
|
||||||
|
void OpenGLWindow::setAnimating(bool animating)
|
||||||
|
{
|
||||||
|
m_animating = animating;
|
||||||
|
|
||||||
|
if (animating)
|
||||||
|
renderLater();
|
||||||
|
}
|
||||||
|
//! [5]
|
||||||
|
|
||||||
91
ci/openglwindow_qt5/openglwindow.h
Normal file
91
ci/openglwindow_qt5/openglwindow.h
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QtGui/QWindow>
|
||||||
|
#include <QtGui/QOpenGLFunctions>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QPainter;
|
||||||
|
class QOpenGLContext;
|
||||||
|
class QOpenGLPaintDevice;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
class OpenGLWindow : public QWindow, protected QOpenGLFunctions
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit OpenGLWindow(QWindow *parent = 0);
|
||||||
|
~OpenGLWindow();
|
||||||
|
|
||||||
|
virtual void render(QPainter *painter);
|
||||||
|
virtual void render();
|
||||||
|
|
||||||
|
virtual void initialize();
|
||||||
|
|
||||||
|
void setAnimating(bool animating);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void renderLater();
|
||||||
|
void renderNow();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *event) override;
|
||||||
|
|
||||||
|
void exposeEvent(QExposeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_animating;
|
||||||
|
|
||||||
|
QOpenGLContext *m_context;
|
||||||
|
QOpenGLPaintDevice *m_device;
|
||||||
|
};
|
||||||
|
//! [1]
|
||||||
|
|
||||||
3
ci/openglwindow_qt5/openglwindow.pri
Normal file
3
ci/openglwindow_qt5/openglwindow.pri
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
INCLUDEPATH += $$PWD
|
||||||
|
SOURCES += $$PWD/openglwindow.cpp
|
||||||
|
HEADERS += $$PWD/openglwindow.h
|
||||||
7
ci/openglwindow_qt5/openglwindow.pro
Normal file
7
ci/openglwindow_qt5/openglwindow.pro
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
include(openglwindow.pri)
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp
|
||||||
|
|
||||||
|
target.path = $$[QT_INSTALL_EXAMPLES]/gui/openglwindow
|
||||||
|
INSTALLS += target
|
||||||
Binary file not shown.
Binary file not shown.
76
ci/redditclient/main.cpp
Normal file
76
ci/redditclient/main.cpp
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditmodel.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
QCommandLineParser parser;
|
||||||
|
const QCommandLineOption clientId(QStringList() << "i" << "client-id",
|
||||||
|
"Specifies the application client id", "client_id");
|
||||||
|
|
||||||
|
parser.addOptions({clientId});
|
||||||
|
parser.process(app);
|
||||||
|
|
||||||
|
if (parser.isSet(clientId)) {
|
||||||
|
QListView view;
|
||||||
|
RedditModel model(parser.value(clientId));
|
||||||
|
view.setModel(&model);
|
||||||
|
view.show();
|
||||||
|
return app.exec();
|
||||||
|
} else {
|
||||||
|
parser.showHelp();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
17
ci/redditclient/redditclient.pro
Normal file
17
ci/redditclient/redditclient.pro
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
QT += widgets network networkauth
|
||||||
|
requires(qtConfig(listview))
|
||||||
|
|
||||||
|
TARGET = redditclient
|
||||||
|
|
||||||
|
# Input
|
||||||
|
SOURCES += main.cpp \
|
||||||
|
redditmodel.cpp \
|
||||||
|
redditwrapper.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
redditmodel.h \
|
||||||
|
redditwrapper.h
|
||||||
|
|
||||||
|
# install
|
||||||
|
target.path = $$[QT_INSTALL_EXAMPLES]/oauth/redditclient
|
||||||
|
INSTALLS += target
|
||||||
130
ci/redditclient/redditmodel.cpp
Normal file
130
ci/redditclient/redditmodel.cpp
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditmodel.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetwork>
|
||||||
|
|
||||||
|
RedditModel::RedditModel(QObject *parent) : QAbstractTableModel(parent) {}
|
||||||
|
|
||||||
|
RedditModel::RedditModel(const QString &clientId, QObject *parent) :
|
||||||
|
QAbstractTableModel(parent),
|
||||||
|
redditWrapper(clientId)
|
||||||
|
{
|
||||||
|
grant();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RedditModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
|
return threads.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RedditModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
|
return threads.size() ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant RedditModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(role);
|
||||||
|
if (!index.isValid())
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
const auto childrenObject = threads.at(index.row());
|
||||||
|
Q_ASSERT(childrenObject.value("data").isObject());
|
||||||
|
const auto dataObject = childrenObject.value("data").toObject();
|
||||||
|
return dataObject.value("title").toString();
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditModel::grant()
|
||||||
|
{
|
||||||
|
redditWrapper.grant();
|
||||||
|
connect(&redditWrapper, &RedditWrapper::authenticated, this, &RedditModel::update);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditModel::update()
|
||||||
|
{
|
||||||
|
auto reply = redditWrapper.requestHotThreads();
|
||||||
|
|
||||||
|
connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
|
reply->deleteLater();
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
emit error(reply->errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto json = reply->readAll();
|
||||||
|
const auto document = QJsonDocument::fromJson(json);
|
||||||
|
Q_ASSERT(document.isObject());
|
||||||
|
const auto rootObject = document.object();
|
||||||
|
Q_ASSERT(rootObject.value("kind").toString() == "Listing");
|
||||||
|
const auto dataValue = rootObject.value("data");
|
||||||
|
Q_ASSERT(dataValue.isObject());
|
||||||
|
const auto dataObject = dataValue.toObject();
|
||||||
|
const auto childrenValue = dataObject.value("children");
|
||||||
|
Q_ASSERT(childrenValue.isArray());
|
||||||
|
const auto childrenArray = childrenValue.toArray();
|
||||||
|
|
||||||
|
if (childrenArray.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
beginInsertRows(QModelIndex(), threads.size(), childrenArray.size() + threads.size() - 1);
|
||||||
|
for (const auto childValue : qAsConst(childrenArray)) {
|
||||||
|
Q_ASSERT(childValue.isObject());
|
||||||
|
threads.append(childValue.toObject());
|
||||||
|
}
|
||||||
|
endInsertRows();
|
||||||
|
});
|
||||||
|
}
|
||||||
86
ci/redditclient/redditmodel.h
Normal file
86
ci/redditclient/redditmodel.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef REDDITMODEL_H
|
||||||
|
#define REDDITMODEL_H
|
||||||
|
|
||||||
|
#include "redditwrapper.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
|
||||||
|
QT_FORWARD_DECLARE_CLASS(QNetworkReply)
|
||||||
|
|
||||||
|
class RedditModel : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
RedditModel(QObject *parent = nullptr);
|
||||||
|
RedditModel(const QString &clientId, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
|
int columnCount(const QModelIndex &parent) const override;
|
||||||
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
||||||
|
void grant();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void error(const QString &errorString);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void update();
|
||||||
|
|
||||||
|
private:
|
||||||
|
RedditWrapper redditWrapper;
|
||||||
|
QPointer<QNetworkReply> liveThreadReply;
|
||||||
|
QList<QJsonObject> threads;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REDDITMODEL_H
|
||||||
133
ci/redditclient/redditwrapper.cpp
Normal file
133
ci/redditclient/redditwrapper.cpp
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditwrapper.h"
|
||||||
|
|
||||||
|
#include <QtGui>
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetworkAuth>
|
||||||
|
|
||||||
|
const QUrl newUrl("https://oauth.reddit.com/new");
|
||||||
|
const QUrl hotUrl("https://oauth.reddit.com/hot");
|
||||||
|
const QUrl liveThreadsUrl("https://oauth.reddit.com/live/XXXX/about.json");
|
||||||
|
|
||||||
|
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
|
||||||
|
oauth2.setReplyHandler(replyHandler);
|
||||||
|
oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
|
||||||
|
oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
|
||||||
|
oauth2.setScope("identity read");
|
||||||
|
|
||||||
|
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
|
||||||
|
QAbstractOAuth::Status status) {
|
||||||
|
if (status == QAbstractOAuth::Status::Granted)
|
||||||
|
emit authenticated();
|
||||||
|
});
|
||||||
|
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QMultiMap<QString, QVariant> *parameters) {
|
||||||
|
if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
|
||||||
|
parameters->insert("duration", "permanent");
|
||||||
|
});
|
||||||
|
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
|
||||||
|
&QDesktopServices::openUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
RedditWrapper::RedditWrapper(const QString &clientIdentifier, QObject *parent) :
|
||||||
|
RedditWrapper(parent)
|
||||||
|
{
|
||||||
|
oauth2.setClientIdentifier(clientIdentifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
QNetworkReply *RedditWrapper::requestHotThreads()
|
||||||
|
{
|
||||||
|
qDebug() << "Getting hot threads...";
|
||||||
|
return oauth2.get(hotUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RedditWrapper::isPermanent() const
|
||||||
|
{
|
||||||
|
return permanent;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::setPermanent(bool value)
|
||||||
|
{
|
||||||
|
permanent = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::grant()
|
||||||
|
{
|
||||||
|
oauth2.grant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::subscribeToLiveUpdates()
|
||||||
|
{
|
||||||
|
qDebug() << "Susbscribing...";
|
||||||
|
QNetworkReply *reply = oauth2.get(liveThreadsUrl);
|
||||||
|
connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
|
reply->deleteLater();
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
qCritical() << "Reddit error:" << reply->errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto json = reply->readAll();
|
||||||
|
|
||||||
|
const auto document = QJsonDocument::fromJson(json);
|
||||||
|
Q_ASSERT(document.isObject());
|
||||||
|
const auto rootObject = document.object();
|
||||||
|
const auto dataValue = rootObject.value("data");
|
||||||
|
Q_ASSERT(dataValue.isObject());
|
||||||
|
const auto dataObject = dataValue.toObject();
|
||||||
|
const auto websocketUrlValue = dataObject.value("websocket_url");
|
||||||
|
Q_ASSERT(websocketUrlValue.isString() && websocketUrlValue.toString().size());
|
||||||
|
const QUrl websocketUrl(websocketUrlValue.toString());
|
||||||
|
emit subscribed(websocketUrl);
|
||||||
|
});
|
||||||
|
}
|
||||||
85
ci/redditclient/redditwrapper.h
Normal file
85
ci/redditclient/redditwrapper.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef REDDITWRAPPER_H
|
||||||
|
#define REDDITWRAPPER_H
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetwork>
|
||||||
|
|
||||||
|
#include <QOAuth2AuthorizationCodeFlow>
|
||||||
|
|
||||||
|
class RedditWrapper : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
RedditWrapper(QObject *parent = nullptr);
|
||||||
|
RedditWrapper(const QString &clientIdentifier, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QNetworkReply *requestHotThreads();
|
||||||
|
|
||||||
|
bool isPermanent() const;
|
||||||
|
void setPermanent(bool value);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void grant();
|
||||||
|
void subscribeToLiveUpdates();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void authenticated();
|
||||||
|
void subscribed(const QUrl &url);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QOAuth2AuthorizationCodeFlow oauth2;
|
||||||
|
bool permanent = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REDDITWRAPPER_H
|
||||||
76
ci/redditclient_qt5/main.cpp
Normal file
76
ci/redditclient_qt5/main.cpp
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditmodel.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
QCommandLineParser parser;
|
||||||
|
const QCommandLineOption clientId(QStringList() << "i" << "client-id",
|
||||||
|
"Specifies the application client id", "client_id");
|
||||||
|
|
||||||
|
parser.addOptions({clientId});
|
||||||
|
parser.process(app);
|
||||||
|
|
||||||
|
if (parser.isSet(clientId)) {
|
||||||
|
QListView view;
|
||||||
|
RedditModel model(parser.value(clientId));
|
||||||
|
view.setModel(&model);
|
||||||
|
view.show();
|
||||||
|
return app.exec();
|
||||||
|
} else {
|
||||||
|
parser.showHelp();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
17
ci/redditclient_qt5/redditclient.pro
Normal file
17
ci/redditclient_qt5/redditclient.pro
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
QT += widgets network networkauth
|
||||||
|
requires(qtConfig(listview))
|
||||||
|
|
||||||
|
TARGET = redditclient
|
||||||
|
|
||||||
|
# Input
|
||||||
|
SOURCES += main.cpp \
|
||||||
|
redditmodel.cpp \
|
||||||
|
redditwrapper.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
redditmodel.h \
|
||||||
|
redditwrapper.h
|
||||||
|
|
||||||
|
# install
|
||||||
|
target.path = $$[QT_INSTALL_EXAMPLES]/oauth/redditclient
|
||||||
|
INSTALLS += target
|
||||||
130
ci/redditclient_qt5/redditmodel.cpp
Normal file
130
ci/redditclient_qt5/redditmodel.cpp
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditmodel.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetwork>
|
||||||
|
|
||||||
|
RedditModel::RedditModel(QObject *parent) : QAbstractTableModel(parent) {}
|
||||||
|
|
||||||
|
RedditModel::RedditModel(const QString &clientId, QObject *parent) :
|
||||||
|
QAbstractTableModel(parent),
|
||||||
|
redditWrapper(clientId)
|
||||||
|
{
|
||||||
|
grant();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RedditModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
|
return threads.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RedditModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
|
return threads.size() ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant RedditModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(role);
|
||||||
|
if (!index.isValid())
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
const auto childrenObject = threads.at(index.row());
|
||||||
|
Q_ASSERT(childrenObject.value("data").isObject());
|
||||||
|
const auto dataObject = childrenObject.value("data").toObject();
|
||||||
|
return dataObject.value("title").toString();
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditModel::grant()
|
||||||
|
{
|
||||||
|
redditWrapper.grant();
|
||||||
|
connect(&redditWrapper, &RedditWrapper::authenticated, this, &RedditModel::update);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditModel::update()
|
||||||
|
{
|
||||||
|
auto reply = redditWrapper.requestHotThreads();
|
||||||
|
|
||||||
|
connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
|
reply->deleteLater();
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
emit error(reply->errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto json = reply->readAll();
|
||||||
|
const auto document = QJsonDocument::fromJson(json);
|
||||||
|
Q_ASSERT(document.isObject());
|
||||||
|
const auto rootObject = document.object();
|
||||||
|
Q_ASSERT(rootObject.value("kind").toString() == "Listing");
|
||||||
|
const auto dataValue = rootObject.value("data");
|
||||||
|
Q_ASSERT(dataValue.isObject());
|
||||||
|
const auto dataObject = dataValue.toObject();
|
||||||
|
const auto childrenValue = dataObject.value("children");
|
||||||
|
Q_ASSERT(childrenValue.isArray());
|
||||||
|
const auto childrenArray = childrenValue.toArray();
|
||||||
|
|
||||||
|
if (childrenArray.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
beginInsertRows(QModelIndex(), threads.size(), childrenArray.size() + threads.size() - 1);
|
||||||
|
for (const auto childValue : qAsConst(childrenArray)) {
|
||||||
|
Q_ASSERT(childValue.isObject());
|
||||||
|
threads.append(childValue.toObject());
|
||||||
|
}
|
||||||
|
endInsertRows();
|
||||||
|
});
|
||||||
|
}
|
||||||
86
ci/redditclient_qt5/redditmodel.h
Normal file
86
ci/redditclient_qt5/redditmodel.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef REDDITMODEL_H
|
||||||
|
#define REDDITMODEL_H
|
||||||
|
|
||||||
|
#include "redditwrapper.h"
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
|
||||||
|
QT_FORWARD_DECLARE_CLASS(QNetworkReply)
|
||||||
|
|
||||||
|
class RedditModel : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
RedditModel(QObject *parent = nullptr);
|
||||||
|
RedditModel(const QString &clientId, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
|
int columnCount(const QModelIndex &parent) const override;
|
||||||
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
||||||
|
void grant();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void error(const QString &errorString);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void update();
|
||||||
|
|
||||||
|
private:
|
||||||
|
RedditWrapper redditWrapper;
|
||||||
|
QPointer<QNetworkReply> liveThreadReply;
|
||||||
|
QList<QJsonObject> threads;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REDDITMODEL_H
|
||||||
133
ci/redditclient_qt5/redditwrapper.cpp
Normal file
133
ci/redditclient_qt5/redditwrapper.cpp
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "redditwrapper.h"
|
||||||
|
|
||||||
|
#include <QtGui>
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetworkAuth>
|
||||||
|
|
||||||
|
const QUrl newUrl("https://oauth.reddit.com/new");
|
||||||
|
const QUrl hotUrl("https://oauth.reddit.com/hot");
|
||||||
|
const QUrl liveThreadsUrl("https://oauth.reddit.com/live/XXXX/about.json");
|
||||||
|
|
||||||
|
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
|
||||||
|
oauth2.setReplyHandler(replyHandler);
|
||||||
|
oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
|
||||||
|
oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
|
||||||
|
oauth2.setScope("identity read");
|
||||||
|
|
||||||
|
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
|
||||||
|
QAbstractOAuth::Status status) {
|
||||||
|
if (status == QAbstractOAuth::Status::Granted)
|
||||||
|
emit authenticated();
|
||||||
|
});
|
||||||
|
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap *parameters) {
|
||||||
|
if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
|
||||||
|
parameters->insert("duration", "permanent");
|
||||||
|
});
|
||||||
|
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
|
||||||
|
&QDesktopServices::openUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
RedditWrapper::RedditWrapper(const QString &clientIdentifier, QObject *parent) :
|
||||||
|
RedditWrapper(parent)
|
||||||
|
{
|
||||||
|
oauth2.setClientIdentifier(clientIdentifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
QNetworkReply *RedditWrapper::requestHotThreads()
|
||||||
|
{
|
||||||
|
qDebug() << "Getting hot threads...";
|
||||||
|
return oauth2.get(hotUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RedditWrapper::isPermanent() const
|
||||||
|
{
|
||||||
|
return permanent;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::setPermanent(bool value)
|
||||||
|
{
|
||||||
|
permanent = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::grant()
|
||||||
|
{
|
||||||
|
oauth2.grant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedditWrapper::subscribeToLiveUpdates()
|
||||||
|
{
|
||||||
|
qDebug() << "Susbscribing...";
|
||||||
|
QNetworkReply *reply = oauth2.get(liveThreadsUrl);
|
||||||
|
connect(reply, &QNetworkReply::finished, [=]() {
|
||||||
|
reply->deleteLater();
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
qCritical() << "Reddit error:" << reply->errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto json = reply->readAll();
|
||||||
|
|
||||||
|
const auto document = QJsonDocument::fromJson(json);
|
||||||
|
Q_ASSERT(document.isObject());
|
||||||
|
const auto rootObject = document.object();
|
||||||
|
const auto dataValue = rootObject.value("data");
|
||||||
|
Q_ASSERT(dataValue.isObject());
|
||||||
|
const auto dataObject = dataValue.toObject();
|
||||||
|
const auto websocketUrlValue = dataObject.value("websocket_url");
|
||||||
|
Q_ASSERT(websocketUrlValue.isString() && websocketUrlValue.toString().size());
|
||||||
|
const QUrl websocketUrl(websocketUrlValue.toString());
|
||||||
|
emit subscribed(websocketUrl);
|
||||||
|
});
|
||||||
|
}
|
||||||
85
ci/redditclient_qt5/redditwrapper.h
Normal file
85
ci/redditclient_qt5/redditwrapper.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2017 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef REDDITWRAPPER_H
|
||||||
|
#define REDDITWRAPPER_H
|
||||||
|
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QtNetwork>
|
||||||
|
|
||||||
|
#include <QOAuth2AuthorizationCodeFlow>
|
||||||
|
|
||||||
|
class RedditWrapper : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
RedditWrapper(QObject *parent = nullptr);
|
||||||
|
RedditWrapper(const QString &clientIdentifier, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QNetworkReply *requestHotThreads();
|
||||||
|
|
||||||
|
bool isPermanent() const;
|
||||||
|
void setPermanent(bool value);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void grant();
|
||||||
|
void subscribeToLiveUpdates();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void authenticated();
|
||||||
|
void subscribed(const QUrl &url);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QOAuth2AuthorizationCodeFlow oauth2;
|
||||||
|
bool permanent = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REDDITWRAPPER_H
|
||||||
87
ci/steps.yml
87
ci/steps.yml
@@ -173,10 +173,8 @@ steps:
|
|||||||
unzip android-ndk-r21e-darwin-x86_64.zip
|
unzip android-ndk-r21e-darwin-x86_64.zip
|
||||||
fi
|
fi
|
||||||
export ANDROID_NDK_ROOT=$(Build.SourcesDirectory)/android-ndk-r21e
|
export ANDROID_NDK_ROOT=$(Build.SourcesDirectory)/android-ndk-r21e
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/accelbubble.7z)
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake $(Build.BinariesDirectory)/tests/accelbubble
|
qmake $(Build.SourcesDirectory)/ci/accelbubble
|
||||||
make
|
make
|
||||||
condition: |
|
condition: |
|
||||||
and(
|
and(
|
||||||
@@ -194,10 +192,8 @@ steps:
|
|||||||
# for iOS target
|
# for iOS target
|
||||||
- bash: |
|
- bash: |
|
||||||
set -ex
|
set -ex
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/accelbubble.7z)
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake $(Build.BinariesDirectory)/tests/accelbubble
|
qmake $(Build.SourcesDirectory)/ci/accelbubble
|
||||||
make
|
make
|
||||||
condition: |
|
condition: |
|
||||||
and(eq(variables['TARGET'], 'ios'),
|
and(eq(variables['TARGET'], 'ios'),
|
||||||
@@ -247,19 +243,25 @@ steps:
|
|||||||
Write-Host '##vso[task.setvariable variable=VSVER]2022'
|
Write-Host '##vso[task.setvariable variable=VSVER]2022'
|
||||||
}
|
}
|
||||||
cd $(WIN_QT_BINDIR)
|
cd $(WIN_QT_BINDIR)
|
||||||
unzip $(Build.SourcesDirectory)\ci\jom_1_1_3.zip
|
$jomurl = 'https://download.qt.io/official_releases/jom/' + $env:JOM
|
||||||
|
$md5sum = $env:MD5 + ' ' + $env:JOM
|
||||||
|
Invoke-WebRequest -Uri $jomurl -OutFile $env:JOM
|
||||||
|
Set-Content -Encoding utf8 -Path md5sums.txt -Value $md5sum
|
||||||
|
md5sum -c md5sums.txt
|
||||||
|
unzip $env:JOM
|
||||||
condition: |
|
condition: |
|
||||||
and(eq(variables['Agent.OS'], 'Windows_NT'),
|
and(eq(variables['Agent.OS'], 'Windows_NT'),
|
||||||
eq(variables['SUBCOMMAND'], 'install-qt'))
|
eq(variables['SUBCOMMAND'], 'install-qt'))
|
||||||
|
env:
|
||||||
|
JOM: jom_1_1_3.zip
|
||||||
|
MD5: f960efa8dc1e99df088d32bc1bc2157c
|
||||||
displayName: Detect toolchain for Windows and update PATH
|
displayName: Detect toolchain for Windows and update PATH
|
||||||
|
|
||||||
# When no modules
|
# When no modules
|
||||||
- script: |
|
- script: |
|
||||||
set -ex
|
set -ex
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/helloworld.7z)
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake $(Build.BinariesDirectory)/tests/helloworld
|
qmake $(Build.SourcesDirectory)/ci/helloworld
|
||||||
make
|
make
|
||||||
condition: |
|
condition: |
|
||||||
and(
|
and(
|
||||||
@@ -284,11 +286,7 @@ steps:
|
|||||||
|
|
||||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||||
mkdir $(Build.BinariesDirectory)\tests
|
qmake $(Build.SourcesDirectory)/ci/helloworld
|
||||||
cd $(Build.BinariesDirectory)\tests
|
|
||||||
7z x $(Build.SourcesDirectory)\ci\helloworld.7z
|
|
||||||
cd ..
|
|
||||||
qmake $(Build.BinariesDirectory)\tests\helloworld
|
|
||||||
jom
|
jom
|
||||||
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
||||||
python -m aqt install-tool $(if (($QT_BASE_MIRROR + "") -ne "") { "-b $QT_BASE_MIRROR" } else {""}) `
|
python -m aqt install-tool $(if (($QT_BASE_MIRROR + "") -ne "") { "-b $QT_BASE_MIRROR" } else {""}) `
|
||||||
@@ -300,11 +298,7 @@ steps:
|
|||||||
}
|
}
|
||||||
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
||||||
Write-Host "Path == " + $env:Path
|
Write-Host "Path == " + $env:Path
|
||||||
mkdir $(Build.BinariesDirectory)\tests
|
qmake $(Build.SourcesDirectory)\ci\helloworld
|
||||||
cd $(Build.BinariesDirectory)\tests
|
|
||||||
7z x $(Build.SourcesDirectory)\ci\helloworld.7z
|
|
||||||
cd ..
|
|
||||||
qmake $(Build.BinariesDirectory)\tests\helloworld
|
|
||||||
mingw32-make
|
mingw32-make
|
||||||
}
|
}
|
||||||
condition: |
|
condition: |
|
||||||
@@ -321,11 +315,8 @@ steps:
|
|||||||
# When --archives non-empty
|
# When --archives non-empty
|
||||||
- script: |
|
- script: |
|
||||||
set -ex
|
set -ex
|
||||||
rm -rf $(Build.BinariesDirectory)/tests
|
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
(cd $(Build.BinariesDirectory)/tests && 7zr x $(Build.SourcesDirectory)/ci/helloworld_qttools.7z)
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake -d $(Build.BinariesDirectory)/tests/helloworld_qttools
|
qmake $(Build.SourcesDirectory)/ci/helloworld_qttools
|
||||||
make
|
make
|
||||||
condition: |
|
condition: |
|
||||||
and(
|
and(
|
||||||
@@ -349,11 +340,7 @@ steps:
|
|||||||
|
|
||||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||||
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
|
qmake $(Build.SourcesDirectory)\ci\helloworld_qttools
|
||||||
mkdir $(Build.BinariesDirectory)\tests
|
|
||||||
cd $(Build.BinariesDirectory)\tests
|
|
||||||
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
|
|
||||||
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
|
|
||||||
nmake
|
nmake
|
||||||
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
||||||
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
||||||
@@ -367,11 +354,7 @@ steps:
|
|||||||
throw 'Failed to install tools_mingw'
|
throw 'Failed to install tools_mingw'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
|
qmake $(Build.SourcesDirectory)\ci\helloworld_qttools
|
||||||
mkdir $(Build.BinariesDirectory)\tests
|
|
||||||
cd $(Build.BinariesDirectory)\tests
|
|
||||||
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
|
|
||||||
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
|
|
||||||
mingw32-make
|
mingw32-make
|
||||||
}
|
}
|
||||||
condition: |
|
condition: |
|
||||||
@@ -395,11 +378,7 @@ steps:
|
|||||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||||
echo Add Qt to PATH: $env:PATH
|
echo Add Qt to PATH: $env:PATH
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
qmake $(Build.SourcesDirectory)/ci/redditclient
|
||||||
cd $(Build.BinariesDirectory)/tests
|
|
||||||
7z x $(Build.SourcesDirectory)/ci/redditclient.7z
|
|
||||||
cd ..
|
|
||||||
qmake $(Build.BinariesDirectory)\tests\redditclient
|
|
||||||
nmake
|
nmake
|
||||||
condition: |
|
condition: |
|
||||||
and(
|
and(
|
||||||
@@ -411,13 +390,12 @@ steps:
|
|||||||
displayName: build test with qmake with MSVC with extra module
|
displayName: build test with qmake with MSVC with extra module
|
||||||
- bash: |
|
- bash: |
|
||||||
set -ex
|
set -ex
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/redditclient.7z)
|
|
||||||
if [[ "6" -eq "${QT_VERSION:0:1}" ]]; then
|
|
||||||
(cd $(Build.BinariesDirectory)/tests/redditclient;patch -i redditclient_6.diff -p1)
|
|
||||||
fi
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake $(Build.BinariesDirectory)/tests/redditclient
|
if [[ "6" -eq "${QT_VERSION:0:1}" ]]; then
|
||||||
|
qmake $(Build.SourcesDirectory)/ci/redditclient
|
||||||
|
else
|
||||||
|
qmake $(Build.SourcesDirectory)/ci/redditclient_qt5
|
||||||
|
fi
|
||||||
make
|
make
|
||||||
condition: |
|
condition: |
|
||||||
and(
|
and(
|
||||||
@@ -440,15 +418,12 @@ steps:
|
|||||||
./emsdk install $(EMSDK_VERSION)
|
./emsdk install $(EMSDK_VERSION)
|
||||||
./emsdk activate --embedded $(EMSDK_VERSION)
|
./emsdk activate --embedded $(EMSDK_VERSION)
|
||||||
source $(Build.BinariesDirectory)/emsdk/emsdk_env.sh
|
source $(Build.BinariesDirectory)/emsdk/emsdk_env.sh
|
||||||
mkdir $(Build.BinariesDirectory)/tests
|
|
||||||
if [[ $(QT_VERSION) = 6* ]]; then
|
|
||||||
OPENGLWINDOW_7Z="openglwindow_qt6.7z"
|
|
||||||
else
|
|
||||||
OPENGLWINDOW_7Z="openglwindow.7z"
|
|
||||||
fi
|
|
||||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/$OPENGLWINDOW_7Z)
|
|
||||||
export PATH=$(QT_BINDIR):$PATH
|
export PATH=$(QT_BINDIR):$PATH
|
||||||
qmake $(Build.BinariesDirectory)/tests/openglwindow
|
if [[ $(QT_VERSION) = 6* ]]; then
|
||||||
|
qmake $(Build.SourcesDirectory)/ci/openglwindow
|
||||||
|
else
|
||||||
|
qmake $(Build.SourcesDirectory)/ci/openglwindow_qt5
|
||||||
|
fi
|
||||||
make
|
make
|
||||||
workingDirectory: $(Build.BinariesDirectory)
|
workingDirectory: $(Build.BinariesDirectory)
|
||||||
condition: |
|
condition: |
|
||||||
@@ -474,13 +449,11 @@ steps:
|
|||||||
echo "Add Qt/qmake to PATH at $(WIN_QT_BINDIR):"
|
echo "Add Qt/qmake to PATH at $(WIN_QT_BINDIR):"
|
||||||
echo "$env:Path"
|
echo "$env:Path"
|
||||||
if ('$(QT_VERSION)' -like '6*') {
|
if ('$(QT_VERSION)' -like '6*') {
|
||||||
7z x $(Build.SourcesDirectory)\ci\openglwindow_qt6.7z
|
|
||||||
echo "Inlined qmake.bat command is: $(WIN_AUTODESK_QT_BINDIR)\qmake -qtconf $(WIN_QT_BINDIR)\target_qt.conf $(Build.BinariesDirectory)\tests\openglwindow"
|
echo "Inlined qmake.bat command is: $(WIN_AUTODESK_QT_BINDIR)\qmake -qtconf $(WIN_QT_BINDIR)\target_qt.conf $(Build.BinariesDirectory)\tests\openglwindow"
|
||||||
$(WIN_AUTODESK_QT_BINDIR)\qmake.exe -qtconf "$(WIN_QT_BINDIR)\target_qt.conf" $(Build.BinariesDirectory)\tests\openglwindow
|
$(WIN_AUTODESK_QT_BINDIR)\qmake.exe -qtconf "$(WIN_QT_BINDIR)\target_qt.conf" $(Build.SourcesDirectory)\ci\openglwindow
|
||||||
} else {
|
} else {
|
||||||
7z x $(Build.SourcesDirectory)\ci\openglwindow.7z
|
|
||||||
echo "Qt5: run qmake.exe"
|
echo "Qt5: run qmake.exe"
|
||||||
qmake $(Build.BinariesDirectory)\tests\openglwindow
|
qmake $(Build.SourcesDirectory)\ci\openglwindow_qt5
|
||||||
}
|
}
|
||||||
if ($false -eq $?) {
|
if ($false -eq $?) {
|
||||||
Write-Error "qmake failed."
|
Write-Error "qmake failed."
|
||||||
|
|||||||
Reference in New Issue
Block a user