diff options
38 files changed, 533 insertions, 846 deletions
diff --git a/.qmake.conf b/.qmake.conf index 0338efe..dc68d38 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.10.1 +MODULE_VERSION = 5.11.0 diff --git a/examples/activeqt/activeqt.pro b/examples/activeqt/activeqt.pro index 97b22bd..6f189bc 100644 --- a/examples/activeqt/activeqt.pro +++ b/examples/activeqt/activeqt.pro @@ -6,10 +6,9 @@ SUBDIRS += comapp \ simple \ wrapper -contains(QT_CONFIG, shared):SUBDIRS += webbrowser +contains(QT_CONFIG, shared):SUBDIRS += mediaplayer contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2): SUBDIRS += opengl qtHaveModule(quickcontrols2):SUBDIRS += simpleqml -# For now only the contain examples with mingw, for the others you need -# an IDL compiler -mingw:SUBDIRS = webbrowser +# Other examples need an IDL compiler +mingw:SUBDIRS = mediaplayer diff --git a/examples/activeqt/mediaplayer/doc/images/activeqt-mediaplayer-example.jpg b/examples/activeqt/mediaplayer/doc/images/activeqt-mediaplayer-example.jpg Binary files differnew file mode 100644 index 0000000..4839242 --- /dev/null +++ b/examples/activeqt/mediaplayer/doc/images/activeqt-mediaplayer-example.jpg diff --git a/examples/activeqt/mediaplayer/doc/src/mediaplayer.qdoc b/examples/activeqt/mediaplayer/doc/src/mediaplayer.qdoc new file mode 100644 index 0000000..6043a6a --- /dev/null +++ b/examples/activeqt/mediaplayer/doc/src/mediaplayer.qdoc @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** 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. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example activeqt/mediaplayer + \title Media Player Example (ActiveQt) + + \brief The Media Player example uses the Microsoft Media Player + ActiveX control to implement a functional media player application. + + \image activeqt-mediaplayer-example.jpg + + \e {Media Player} demonstrates how a Qt application can communicate with + embedded ActiveX controls using signals, slots, and the \c dynamicCall() + function. + + \quotefromfile activeqt/mediaplayer/main.cpp + \skipto class MainWindow + \printuntil /^\}/ + + The \c MainWindow class declares a \c QMainWindow based user interface, + using the \c Ui::MainWindow class created by Qt Designer. A number + of slots are implemented to handle events from user interface elements, + including the \c mediaPlayer object, which is a QAxWidget hosting + the Microsoft Media Player ActiveX control. + + \quotefromfile activeqt/mediaplayer/main.cpp + \skipto MainWindow::MainWindow() + \printuntil /^\}/ + + The constructor initializes the user interface, restores a previously + saved window geometry, and uses the \c dynamicCall() function to invoke + the APIs implemented by the Microsoft Media Player ActiveX control, + to set initial configuration parameters. + + \quotefromfile activeqt/mediaplayer/main.cpp + \skipto MainWindow::on_mediaPlayer_PlayStateChange + \printuntil /^\}/ + + The \c on_mediaPlayer_PlayStateChange slot handles the signal emitted + by the \c mediaPlayer object when its state changes. + + \quotefromfile activeqt/mediaplayer/main.cpp + \skipto MainWindow::openMedia + \printuntil /^\}/ + + The \c openMedia() function allows a media file to be opened by using + the \c dynamicCall() function to set the URL property in the ActiveX + control, which causes the media file to be loaded and played. + + \quotefromfile activeqt/mediaplayer/main.cpp + \skipto int main + \printuntil /^\}/ + + The \c main() function starts the application using standard Qt APIs + and uses an optional command line argument as the name of a media + file to be loaded by the player. + + To build the example, you must first build the QAxContainer + library. Then run your make tool in + \c examples/activeqt/mediaplayer and run the resulting + \c mediaplayer.exe. +*/ diff --git a/examples/activeqt/mediaplayer/main.cpp b/examples/activeqt/mediaplayer/main.cpp new file mode 100644 index 0000000..c20f262 --- /dev/null +++ b/examples/activeqt/mediaplayer/main.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples 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 <QApplication> +#include <QMessageBox> +#include <QMainWindow> +#include <QDesktopWidget> +#include <QVariant> +#include <QSettings> +#include <QFileDialog> +#include <QCommandLineParser> + +#include "ui_mainwindow.h" + +static const char geometryKey[] = "Geometry"; + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(); + ~MainWindow(); + void openMedia(const QString &mediaUrl); + +public slots: + void on_mediaPlayer_PlayStateChange(int newState); + void on_actionOpen_triggered(); + void on_actionExit_triggered(); + void on_actionAbout_triggered(); + void on_actionAboutQt_triggered(); + +private: + void updateWindowTitle(const QString &state); + Ui::MainWindow m_ui; +}; + +MainWindow::MainWindow() +{ + m_ui.setupUi(this); + + QSettings settings(QSettings::IniFormat, QSettings::UserScope, + QCoreApplication::organizationName(), QCoreApplication::applicationName()); + + const QByteArray restoredGeometry = settings.value(QLatin1String(geometryKey)).toByteArray(); + if (restoredGeometry.isEmpty() || !restoreGeometry(restoredGeometry)) { + const QRect availableGeometry = QApplication::desktop()->availableGeometry(this); + const QSize size = (availableGeometry.size() * 4) / 5; + resize(size); + move(availableGeometry.center() - QPoint(size.width(), size.height()) / 2); + } + + m_ui.mediaPlayer->dynamicCall("enableContextMenu", false); + m_ui.mediaPlayer->dynamicCall("stretchToFit", true); + updateWindowTitle(""); +} + +MainWindow::~MainWindow() +{ + QSettings settings(QSettings::IniFormat, QSettings::UserScope, + QCoreApplication::organizationName(), QCoreApplication::applicationName()); + settings.setValue(QLatin1String(geometryKey), saveGeometry()); +} + +void MainWindow::on_mediaPlayer_PlayStateChange(int newState) +{ + static const QHash<int, const char *> stateMapping { + {1, "Stopped"}, + {2, "Paused"}, + {3, "Playing"}, + {4, "Scanning Forwards"}, + {5, "Scanning Backwards"}, + {6, "Buffering"}, + {7, "Waiting"}, + {8, "Media Ended"}, + {9, "Transitioning"}, + {10, "Ready"}, + {11, "Reconnecting"}, + }; + const char *stateStr = stateMapping.value(newState, ""); + updateWindowTitle(tr(stateStr)); +} + +void MainWindow::on_actionOpen_triggered() +{ + QFileDialog fileDialog(this, tr("Open File")); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setFileMode(QFileDialog::ExistingFile); + fileDialog.setMimeTypeFilters({ "application/octet-stream", "video/x-msvideo", "video/mp4", "audio/mpeg", "audio/mp4" }); + if (fileDialog.exec() == QDialog::Accepted) + openMedia(fileDialog.selectedFiles().first()); +} + +void MainWindow::on_actionExit_triggered() +{ + QCoreApplication::quit(); +} + +void MainWindow::on_actionAbout_triggered() +{ + QMessageBox::about(this, tr("About Media Player"), + tr("This Example has been created using the ActiveQt integration into Qt Designer.\n" + "It demonstrates the use of QAxWidget to embed the Windows Media Player ActiveX\n" + "control into a Qt application.")); +} + +void MainWindow::on_actionAboutQt_triggered() +{ + QMessageBox::aboutQt(this, tr("About Qt")); +} + +void MainWindow::openMedia(const QString &mediaUrl) +{ + if (!mediaUrl.isEmpty()) + m_ui.mediaPlayer->dynamicCall("URL", mediaUrl); +} + +void MainWindow::updateWindowTitle(const QString &state) +{ + QString appName = QCoreApplication::applicationName(); + QString title = state.isEmpty() ? appName : + QString("%1 (%2)").arg(appName, state); + setWindowTitle(title); +} + +#include "main.moc" + +int main(int argc, char *argv[]) +{ + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QApplication app(argc, argv); + QCoreApplication::setApplicationVersion(QT_VERSION_STR); + QCoreApplication::setApplicationName(QLatin1String("Active Qt Media Player")); + QCoreApplication::setOrganizationName(QLatin1String("QtProject")); + + MainWindow w; + QCommandLineParser parser; + parser.setApplicationDescription(QCoreApplication::applicationName()); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument("file", "The media file to open."); + parser.process(app); + if (!parser.positionalArguments().isEmpty()) + w.openMedia(parser.positionalArguments().constFirst()); + w.show(); + return app.exec(); +} diff --git a/examples/activeqt/mediaplayer/mainwindow.ui b/examples/activeqt/mediaplayer/mainwindow.ui new file mode 100644 index 0000000..b83d392 --- /dev/null +++ b/examples/activeqt/mediaplayer/mainwindow.ui @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>794</width> + <height>599</height> + </rect> + </property> + <property name="acceptDrops"> + <bool>true</bool> + </property> + <property name="windowTitle"> + <string>Qt Media Player</string> + </property> + <widget class="QWidget" name="centralWidget"> + <layout class="QHBoxLayout" name="unnamed"> + <property name="spacing"> + <number>6</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QFrame" name="Frame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <layout class="QVBoxLayout" name="unnamed"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <widget class="MediaAxWidget" name="mediaPlayer"> + <property name="control" stdset="0"> + <string>{6bf52a52-394a-11d3-b153-00c04f79faa6}</string> + </property> + <property name="sizePolicy" stdset="0"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>794</width> + <height>21</height> + </rect> + </property> + <widget class="QMenu" name="PopupMenu"> + <property name="title"> + <string>&File</string> + </property> + <addaction name="actionOpen"/> + <addaction name="actionExit"/> + </widget> + <widget class="QMenu" name="menuHelp"> + <property name="title"> + <string>&Help</string> + </property> + <addaction name="actionAbout"/> + <addaction name="actionAboutQt"/> + </widget> + <addaction name="PopupMenu"/> + <addaction name="menuHelp"/> + </widget> + <action name="actionOpen"> + <property name="text"> + <string>&Open</string> + </property> + </action> + <action name="actionExit"> + <property name="text"> + <string>E&xit</string> + </property> + </action> + <action name="actionAbout"> + <property name="text"> + <string>&About</string> + </property> + </action> + <action name="actionAboutQt"> + <property name="text"> + <string>About &Qt</string> + </property> + </action> + <actiongroup name="FileNewGroup"/> + </widget> + <layoutdefault spacing="6" margin="11"/> + <customwidgets> + <customwidget> + <class>QAxWidget</class> + <extends>QWidget</extends> + <header>qaxwidget.h</header> + </customwidget> + <customwidget> + <class>MediaAxWidget</class> + <extends>QAxWidget</extends> + <header>mediaaxwidget.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/examples/activeqt/webbrowser/webaxwidget.h b/examples/activeqt/mediaplayer/mediaaxwidget.h index 9a15a72..a57ca05 100644 --- a/examples/activeqt/webbrowser/webaxwidget.h +++ b/examples/activeqt/mediaplayer/mediaaxwidget.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. @@ -48,28 +48,29 @@ ** ****************************************************************************/ -#ifndef WEBAXWIDGET_H -#define WEBAXWIDGET_H +#ifndef MEDIAAXWIDGET_H +#define MEDIAAXWIDGET_H #include <ActiveQt/QAxWidget> -#include "windows.h" +#include <qt_windows.h> -class WebAxWidget : public QAxWidget +// Overrides the translateKeyEvent() function to pass keystrokes +// to the Windows Media Player ActiveX control. +class MediaAxWidget : public QAxWidget { public: - - WebAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = 0) + MediaAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = 0) : QAxWidget(parent, f) { } + protected: - bool translateKeyEvent(int message, int keycode) const Q_DECL_OVERRIDE + bool translateKeyEvent(int message, int keycode) const override { if (message >= WM_KEYFIRST && message <= WM_KEYLAST) return true; return QAxWidget::translateKeyEvent(message, keycode); } - }; -#endif // WEBAXWIDGET_H +#endif // MEDIAAXWIDGET_H diff --git a/examples/activeqt/webbrowser/webbrowser.pro b/examples/activeqt/mediaplayer/mediaplayer.pro index 76a791c..ad787a3 100644 --- a/examples/activeqt/webbrowser/webbrowser.pro +++ b/examples/activeqt/mediaplayer/mediaplayer.pro @@ -2,11 +2,10 @@ TEMPLATE = app QT += widgets axcontainer -HEADERS = webaxwidget.h +HEADERS = mediaaxwidget.h SOURCES = main.cpp FORMS = mainwindow.ui -RESOURCES += webbrowser.qrc # install -target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/webbrowser +target.path = $$[QT_INSTALL_EXAMPLES]/activeqt/mediaplayer INSTALLS += target diff --git a/examples/activeqt/webbrowser/doc/images/activeqt-webbrowser-example.png b/examples/activeqt/webbrowser/doc/images/activeqt-webbrowser-example.png Binary files differdeleted file mode 100644 index 0bb451a..0000000 --- a/examples/activeqt/webbrowser/doc/images/activeqt-webbrowser-example.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/doc/src/webbrowser.qdoc b/examples/activeqt/webbrowser/doc/src/webbrowser.qdoc deleted file mode 100644 index b8215bd..0000000 --- a/examples/activeqt/webbrowser/doc/src/webbrowser.qdoc +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** 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:FDL$ -** 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. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \example activeqt/webbrowser - \title Web Browser Example (ActiveQt) - - \brief The Web Browser example uses the Microsoft Web Browser - ActiveX control to implement a fully functional Web Browser - application. The user interface has been developed using the Qt - Designer integration of the QAxWidget class. - - \image activeqt-webbrowser-example.png - - The code demonstrates how the Qt application can communicate - with the embedded ActiveX controls using signals, slots and the - dynamicCall() function. - - \snippet activeqt/webbrowser/main.cpp 0 - - The \c MainWindow class declares a \c QMainWindow based user interface, - using the \c Ui::MainWindow class generated by Qt Designer. A number - of slots are implemented to handle events from the various user - interface elements, including the \c WebBrowser object, which is a - QAxWidget hosting the Microsoft Web Browser control. - - \snippet activeqt/webbrowser/main.cpp 1 - - The constructor initializes the user interface, installs a - progress bar on the status bar, and loads the bookmarks. - - \snippet activeqt/webbrowser/main.cpp 2 - Different slots handle the signals emitted by the WebBrowser object. - - Connections that don't require any coding, i.e. connecting the \c back - action to the \c GoBack() slot, have already been made in Qt Designer. - - \snippet activeqt/webbrowser/main.cpp 3 - \snippet activeqt/webbrowser/main.cpp 4 - - The rest of the implementation is not related to ActiveQt - the actions - are handled by different slots, and the entry point function starts the - application using standard Qt APIs. - - To build the example you must first build the QAxContainer - library. Then run your make tool in \c - examples/activeqt/webbrowser and run the resulting \c - webbrowser.exe. -*/ diff --git a/examples/activeqt/webbrowser/images/back.png b/examples/activeqt/webbrowser/images/back.png Binary files differdeleted file mode 100644 index ca100f6..0000000 --- a/examples/activeqt/webbrowser/images/back.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/forward.png b/examples/activeqt/webbrowser/images/forward.png Binary files differdeleted file mode 100644 index 833cbfa..0000000 --- a/examples/activeqt/webbrowser/images/forward.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/go.png b/examples/activeqt/webbrowser/images/go.png Binary files differdeleted file mode 100644 index 8aaf835..0000000 --- a/examples/activeqt/webbrowser/images/go.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/home.png b/examples/activeqt/webbrowser/images/home.png Binary files differdeleted file mode 100644 index 51dc56d..0000000 --- a/examples/activeqt/webbrowser/images/home.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/refresh.png b/examples/activeqt/webbrowser/images/refresh.png Binary files differdeleted file mode 100644 index cd24b5f..0000000 --- a/examples/activeqt/webbrowser/images/refresh.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/search.png b/examples/activeqt/webbrowser/images/search.png Binary files differdeleted file mode 100644 index 4f1e1ca..0000000 --- a/examples/activeqt/webbrowser/images/search.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/images/stop.png b/examples/activeqt/webbrowser/images/stop.png Binary files differdeleted file mode 100644 index ded466c..0000000 --- a/examples/activeqt/webbrowser/images/stop.png +++ /dev/null diff --git a/examples/activeqt/webbrowser/main.cpp b/examples/activeqt/webbrowser/main.cpp deleted file mode 100644 index 6d6d6d5..0000000 --- a/examples/activeqt/webbrowser/main.cpp +++ /dev/null @@ -1,359 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the examples 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 <QApplication> -#include <QMessageBox> -#include <QProgressBar> -#include <QLineEdit> -#include <QLabel> -#include <QStatusBar> -#include <QMainWindow> -#include <QDesktopWidget> -#include <QAbstractEventDispatcher> -#include <QSignalMapper> -#include <QVariant> -#include <QSettings> - -#include "ui_mainwindow.h" - -static const char qtUrl[] = "qt.io"; -static const char iWebBrowser2DocumentationUrl[] = "http://msdn.microsoft.com/en-us/library/aa752127%28v=vs.85%29.aspx"; -static const char versionKey[] = "Version"; -static const char geometryKey[] = "Geometry"; - -struct Location { - Location(const QString &t = QString(), const QString &a = QString()) : title(t), address(a) {} - - QString title; - QString address; -}; - -Q_DECLARE_METATYPE(Location) - -static QList<Location> defaultBookmarks() -{ - QList<Location> result; - result.append(Location(QStringLiteral("Qt"), QLatin1String(qtUrl))); - result.append(Location(QStringLiteral("Digia"), QStringLiteral("http://qt.digia.com/"))); - result.append(Location(QStringLiteral("IWebBrowser2 MSDN Documentation"), QLatin1String(iWebBrowser2DocumentationUrl))); - return result; -} - -static bool containsAddress(const QList<Location> &locations, const QString &address) -{ - for (const Location &location : locations) { - if (location.address == address) - return true; - } - return false; -} - -static inline Location locationFromAction(const QAction *action) -{ - return action->data().value<Location>(); -} - -static QList<Location> readBookMarks(QSettings &settings) -{ - QList<Location> result; - if (const int count = settings.beginReadArray(QStringLiteral("Bookmarks"))) { - const QString titleKey = QStringLiteral("title"); - const QString addressKey = QStringLiteral("address"); - for (int i = 0; i < count; ++i) { - settings.setArrayIndex(i); - result.append(Location(settings.value(titleKey).toString(), - settings.value(addressKey).toString())); - } - } - settings.endArray(); - return result; -} - -static void saveBookMarks(const QList<Location> &bookmarks, QSettings &settings) -{ - const int count = bookmarks.size(); - settings.beginWriteArray(QStringLiteral("Bookmarks")); - const QString titleKey = QStringLiteral("title"); - const QString addressKey = QStringLiteral("address"); - for (int i = 0; i < count; ++i) { - settings.setArrayIndex(i); - settings.setValue(titleKey, bookmarks.at(i).title); - settings.setValue(addressKey, bookmarks.at(i).address); - } - settings.endArray(); -} - -//! [0] -class MainWindow : public QMainWindow, public Ui::MainWindow -{ - Q_OBJECT -public: - explicit MainWindow(); - virtual ~MainWindow(); - -public slots: - void navigate(const QString &address); - void on_WebBrowser_TitleChange(const QString &title); - void on_WebBrowser_ProgressChange(int a, int b); - void on_WebBrowser_CommandStateChange(int cmd, bool on); - void on_WebBrowser_BeforeNavigate(); - void on_WebBrowser_NavigateComplete(const QString &address); - - void on_actionGo_triggered(); - void on_actionNewWindow_triggered(); - void on_actionAddBookmark_triggered(); - void on_actionAbout_triggered(); - void on_actionAboutQt_triggered(); - void on_actionFileClose_triggered(); - -private: - inline const QString address() const - { return m_addressEdit->text().trimmed(); } - QList<Location> bookmarks() const; - QAction *addLocation(const Location &location, QMenu *menu); - inline void addBookmark(const Location &location) - { m_bookmarkActions << addLocation(location, BookmarksMenu); } - - QProgressBar *m_progressBar; - QLineEdit *m_addressEdit; - QList<QAction *> m_bookmarkActions; - QList<QAction *> m_historyActions; - QSignalMapper m_locationActionMapper; -}; -//! [0] //! [1] - -MainWindow::MainWindow() -{ - setupUi(this); - - m_addressEdit = new QLineEdit; - tbAddress->insertWidget(actionGo, new QLabel(tr("Address"))); - tbAddress->insertWidget(actionGo, m_addressEdit); - - connect(m_addressEdit, SIGNAL(returnPressed()), actionGo, SLOT(trigger())); - - connect(actionBack, SIGNAL(triggered()), WebBrowser, SLOT(GoBack())); - connect(actionForward, SIGNAL(triggered()), WebBrowser, SLOT(GoForward())); - connect(actionStop, SIGNAL(triggered()), WebBrowser, SLOT(Stop())); - connect(actionRefresh, SIGNAL(triggered()), WebBrowser, SLOT(Refresh())); - connect(actionHome, SIGNAL(triggered()), WebBrowser, SLOT(GoHome())); - connect(actionSearch, SIGNAL(triggered()), WebBrowser, SLOT(GoSearch())); - - m_progressBar = new QProgressBar(statusBar()); - m_progressBar->setTextVisible(false); - m_progressBar->hide(); - statusBar()->addPermanentWidget(m_progressBar); - - connect(&m_locationActionMapper, QOverload<const QString &>::of(&QSignalMapper::mapped), this, &MainWindow::navigate); - - QSettings settings(QSettings::IniFormat, QSettings::UserScope, - QCoreApplication::organizationName(), QCoreApplication::applicationName()); - const QByteArray restoredGeometry = settings.value(QLatin1String(geometryKey)).toByteArray(); - if (restoredGeometry.isEmpty() || !restoreGeometry(restoredGeometry)) { - const QRect availableGeometry = QApplication::desktop()->availableGeometry(this); - const QSize size = (availableGeometry.size() * 4) / 5; - resize(size); - move(availableGeometry.center() - QPoint(size.width(), size.height()) / 2); - } - const QString restoredVersion = settings.value(QLatin1String(versionKey)).toString(); - QList<Location> bookmarks = readBookMarks(settings); - if (bookmarks.isEmpty() || restoredVersion.isEmpty()) - bookmarks = defaultBookmarks(); - for (const Location &bookmark : qAsConst(bookmarks)) - addBookmark(bookmark); -} - -//! [1] - -MainWindow::~MainWindow() -{ - QSettings settings(QSettings::IniFormat, QSettings::UserScope, - QCoreApplication::organizationName(), QCoreApplication::applicationName()); - saveBookMarks(bookmarks(), settings); - settings.setValue(QLatin1String(versionKey), QLatin1String(QT_VERSION_STR)); - settings.setValue(QLatin1String(geometryKey), saveGeometry()); -} - -QAction *MainWindow::addLocation(const Location &location, QMenu *menu) -{ - QAction *action = menu->addAction(location.title); - action->setData(QVariant::fromValue(location)); - m_locationActionMapper.setMapping(action, location.address); - connect(action, &QAction::triggered, &m_locationActionMapper, QOverload<>::of(&QSignalMapper::map)); - return action; -} - -QList<Location> MainWindow::bookmarks() const -{ - QList<Location> result; - for (const QAction *action : qAsConst(m_bookmarkActions)) - result.append(locationFromAction(action)); - return result; -} - -void MainWindow::on_actionAddBookmark_triggered() -{ - if (!m_historyActions.isEmpty()) { - const Location location = locationFromAction(m_historyActions.last()); - if (!containsAddress(bookmarks(), location.address)) - addBookmark(location); - } -} - -//! [2] -void MainWindow::on_WebBrowser_TitleChange(const QString &title) -{ - // This is called multiple times after NavigateComplete(). - // Add new URLs to history here. - setWindowTitle(tr("Qt WebBrowser - ") + title); - const QString currentAddress = address(); - const QString historyAddress = m_historyActions.isEmpty() ? - QString() : locationFromAction(m_historyActions.last()).address; - if (currentAddress.isEmpty() || currentAddress == QStringLiteral("about:blank") || currentAddress == historyAddress) - return; - m_historyActions << addLocation(Location(title, currentAddress), HistoryMenu); - if (m_historyActions.size() > 10) - delete m_historyActions.takeFirst(); -} - -void MainWindow::on_WebBrowser_ProgressChange(int a, int b) -{ - if (a <= 0 || b <= 0) { - m_progressBar->hide(); - return; - } - m_progressBar->setRange(0, b); - m_progressBar->setValue(a); - m_progressBar->show(); -} - -void MainWindow::on_WebBrowser_CommandStateChange(int cmd, bool on) -{ - switch (cmd) { - case 1: - actionForward->setEnabled(on); - break; - case 2: - actionBack->setEnabled(on); - break; - } -} - -void MainWindow::on_WebBrowser_BeforeNavigate() -{ - actionStop->setEnabled(true); -} - -void MainWindow::on_WebBrowser_NavigateComplete(const QString &url) -{ - QSignalBlocker blocker(m_addressEdit); - actionStop->setEnabled(false); - m_addressEdit->setText(url); -} - -//! [3] -void MainWindow::on_actionGo_triggered() -{ - navigate(address()); -} - -//! [2] - -void MainWindow::navigate(const QString &url) -{ - WebBrowser->dynamicCall("Navigate(const QString&)", url); -} - -void MainWindow::on_actionNewWindow_triggered() -{ - MainWindow *window = new MainWindow; - window->show(); - if (m_addressEdit->text().isEmpty()) - return; - window->m_addressEdit->setText(m_addressEdit->text()); - window->actionStop->setEnabled(true); - window->on_actionGo_triggered(); -} - -void MainWindow::on_actionAbout_triggered() -{ - QMessageBox::about(this, tr("About WebBrowser"), - tr("This Example has been created using the ActiveQt integration into Qt Designer.\n" - "It demonstrates the use of QAxWidget to embed the Internet Explorer ActiveX\n" - "control into a Qt application.")); -} - -void MainWindow::on_actionAboutQt_triggered() -{ - QMessageBox::aboutQt(this, tr("About Qt")); -} - -void MainWindow::on_actionFileClose_triggered() -{ - close(); -} - -#include "main.moc" - -//! [3] //! [4] -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - QCoreApplication::setApplicationVersion(QT_VERSION_STR); - QCoreApplication::setApplicationName(QStringLiteral("Active Qt Web Browser")); - QCoreApplication::setOrganizationName(QStringLiteral("QtProject")); - MainWindow w; - const auto &arguments = QCoreApplication::arguments(); - const QString url = arguments.value(1, QString::fromLatin1(qtUrl)); - w.navigate(url); - w.show(); - return a.exec(); -} -//! [4] diff --git a/examples/activeqt/webbrowser/mainwindow.ui b/examples/activeqt/webbrowser/mainwindow.ui deleted file mode 100644 index 4f5877d..0000000 --- a/examples/activeqt/webbrowser/mainwindow.ui +++ /dev/null @@ -1,290 +0,0 @@ -<ui version="4.0" stdsetdef="1" > - <class>MainWindow</class> - <widget class="QMainWindow" name="MainWindow" > - <property name="objectName" > - <string notr="true" >MainWindow</string> - </property> - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>812</width> - <height>605</height> - </rect> - </property> - <property name="windowTitle" > - <string>Qt WebBrowser</string> - </property> - <widget class="QWidget" name="centralWidget"> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QFrame" name="Frame3" > - <property name="objectName" > - <string notr="true" >Frame3</string> - </property> - <property name="frameShape" > - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow" > - <enum>QFrame::Sunken</enum> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>1</number> - </property> - <property name="spacing" > - <number>0</number> - </property> - <item> - <widget class="WebAxWidget" name="WebBrowser" > - <property name="objectName" > - <string notr="true" >WebBrowser</string> - </property> - <property name="focusPolicy" > - <enum>Qt::StrongFocus</enum> - </property> - <property name="control" > - <string>{8856F961-340A-11D0-A96B-00C04FD705A2}</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QToolBar" name="tbNavigate" > - <property name="objectName" > - <string notr="true" >tbNavigate</string> - </property> - <property name="windowTitle" > - <string>Navigation</string> - </property> - <addaction name="actionBack" /> - <addaction name="actionForward" /> - <addaction name="actionStop" /> - <addaction name="actionRefresh" /> - <addaction name="actionHome" /> - <addaction name="separator" /> - <addaction name="actionSearch" /> - </widget> - <widget class="QToolBar" name="tbAddress" > - <property name="objectName" > - <string notr="true" >tbAddress</string> - </property> - <property name="windowTitle" > - <string>Address</string> - </property> - <addaction name="actionGo" /> - </widget> - <widget class="QMenuBar" name="menubar" > - <property name="objectName" > - <string notr="true" >menubar</string> - </property> - <widget class="QMenu" name="PopupMenu" > - <property name="objectName" > - <string notr="true" >PopupMenu</string> - </property> - <property name="title" > - <string>&File</string> - </property> - <widget class="QMenu" name="FileNewGroup_2" > - <property name="objectName" > - <string notr="true" >FileNewGroup_2</string> - </property> - <property name="title" > - <string>New</string> - </property> - <addaction name="actionNewWindow" /> - </widget> - <addaction name="FileNewGroup" /> - <addaction name="FileNewGroup_2" /> - <addaction name="separator" /> - <addaction name="actionFileClose" /> - </widget> - <widget class="QMenu" name="BookmarksMenu" > - <property name="objectName" > - <string notr="true" >BookmarksMenu</string> - </property> - <property name="title" > - <string>&Bookmarks</string> - </property> - <addaction name="actionAddBookmark" /> - <addaction name="separator" /> - </widget> - <widget class="QMenu" name="HistoryMenu" > - <property name="objectName" > - <string notr="true" >HistoryMenu</string> - </property> - <property name="title" > - <string>Hi&story</string> - </property> - </widget> - <widget class="QMenu" name="unnamed" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="title" > - <string>&Help</string> - </property> - <addaction name="actionAbout" /> - <addaction name="actionAboutQt" /> - </widget> - <addaction name="PopupMenu" /> - <addaction name="BookmarksMenu" /> - <addaction name="HistoryMenu" /> - <addaction name="unnamed" /> - </widget> - <action name="actionGo" > - <property name="objectName" > - <string>actionGo</string> - </property> - <property name="icon" > - <iconset>:/images/go.png</iconset> - </property> - <property name="iconText" > - <string>Go</string> - </property> - </action> - <action name="actionBack" > - <property name="objectName" > - <string>actionBack</string> - </property> - <property name="icon" > - <iconset>:/images/back.png</iconset> - </property> - <property name="iconText" > - <string>Back</string> - </property> - <property name="shortcut" > - <string>Backspace</string> - </property> - </action> - <action name="actionForward" > - <property name="objectName" > - <string>actionForward</string> - </property> - <property name="icon" > - <iconset>:/images/forward.png</iconset> - </property> - <property name="iconText" > - <string>Forward</string> - </property> - </action> - <action name="actionStop" > - <property name="objectName" > - <string>actionStop</string> - </property> - <property name="icon" > - <iconset>:/images/stop.png</iconset> - </property> - <property name="iconText" > - <string>Stop</string> - </property> - </action> - <action name="actionRefresh" > - <property name="objectName" > - <string>actionRefresh</string> - </property> - <property name="icon" > - <iconset>:/images/refresh.png</iconset> - </property> - <property name="iconText" > - <string>Refresh</string> - </property> - </action> - <action name="actionHome" > - <property name="objectName" > - <string>actionHome</string> - </property> - <property name="icon" > - <iconset>:/images/home.png</iconset> - </property> - <property name="iconText" > - <string>Home</string> - </property> - </action> - <action name="actionFileClose" > - <property name="objectName" > - <string>actionFileClose</string> - </property> - <property name="iconText" > - <string>Close</string> - </property> - <property name="text" > - <string>C&lose</string> - </property> - </action> - <action name="actionSearch" > - <property name="objectName" > - <string>actionSearch</string> - </property> - <property name="icon" > - <iconset>:/images/search.png</iconset> - </property> - <property name="iconText" > - <string>Search</string> - </property> - </action> - <action name="actionAbout" > - <property name="objectName" > - <string>actionAbout</string> - </property> - <property name="iconText" > - <string>About</string> - </property> - </action> - <action name="actionAddBookmark" > - <property name="objectName" > - <string>actionAddBookmark</string> - </property> - <property name="text" > - <string>Add Bookmark</string> - </property> - </action> - <action name="actionAboutQt" > - <property name="objectName" > - <string>actionAboutQt</string> - </property> - <property name="iconText" > - <string>About Qt</string> - </property> - </action> - <actiongroup name="FileNewGroup" > - <action name="actionNewWindow" > - <property name="objectName" > - <string>actionNewWindow</string> - </property> - <property name="iconText" > - <string>Window</string> - </property> - <property name="shortcut" > - <string>Ctrl+N</string> - </property> - </action> - <property name="objectName" > - <string>FileNewGroup</string> - </property> - </actiongroup> - </widget> - <customwidgets> - <customwidget> - <class>WebAxWidget</class> - <extends>QAxWidget</extends> - <header>webaxwidget.h</header> - </customwidget> - </customwidgets> - <layoutdefault spacing="6" margin="11" /> -</ui> diff --git a/examples/activeqt/webbrowser/webbrowser.qrc b/examples/activeqt/webbrowser/webbrowser.qrc deleted file mode 100644 index 4f463e2..0000000 --- a/examples/activeqt/webbrowser/webbrowser.qrc +++ /dev/null @@ -1,11 +0,0 @@ -<RCC> -<qresource> - <file>images/back.png</file> - <file>images/forward.png</file> - <file>images/go.png</file> - <file>images/home.png</file> - <file>images/refresh.png</file> - <file>images/search.png</file> - <file>images/stop.png</file> -</qresource> -</RCC> diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index aa66398..fa3eacf 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -1444,13 +1444,13 @@ bool QAxBase::initializeRemote(IUnknown** ptr) COAUTHIDENTITY authIdentity; authIdentity.UserLength = ULONG(user.length()); authIdentity.User = authIdentity.UserLength - ? const_cast<ushort *>(user.utf16()) : Q_NULLPTR; + ? const_cast<ushort *>(user.utf16()) : nullptr; authIdentity.DomainLength = ULONG(domain.length()); authIdentity.Domain = authIdentity.DomainLength - ? const_cast<ushort *>(domain.utf16()) : Q_NULLPTR; + ? const_cast<ushort *>(domain.utf16()) : nullptr; authIdentity.PasswordLength = ULONG(passwd.length()); authIdentity.Password = authIdentity.PasswordLength - ? const_cast<ushort *>(passwd.utf16()) : Q_NULLPTR; + ? const_cast<ushort *>(passwd.utf16()) : nullptr; authIdentity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; COAUTHINFO authInfo; diff --git a/src/activeqt/container/qaxbase.h b/src/activeqt/container/qaxbase.h index 14be355..722b210 100644 --- a/src/activeqt/container/qaxbase.h +++ b/src/activeqt/container/qaxbase.h @@ -74,7 +74,7 @@ class QAxBase public: typedef QMap<QString, QVariant> PropertyBag; - explicit QAxBase(IUnknown *iface = Q_NULLPTR); + explicit QAxBase(IUnknown *iface = nullptr); virtual ~QAxBase(); QString control() const; @@ -183,13 +183,13 @@ private: template <> inline QAxBase *qobject_cast<QAxBase*>(const QObject *o) { - void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxBase") : Q_NULLPTR; + void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxBase") : nullptr; return static_cast<QAxBase *>(result); } template <> inline QAxBase *qobject_cast<QAxBase*>(QObject *o) { - void *result = o ? o->qt_metacast("QAxBase") : Q_NULLPTR; + void *result = o ? o->qt_metacast("QAxBase") : nullptr; return static_cast<QAxBase *>(result); } diff --git a/src/activeqt/container/qaxobject.h b/src/activeqt/container/qaxobject.h index 25d8f1d..bebc60a 100644 --- a/src/activeqt/container/qaxobject.h +++ b/src/activeqt/container/qaxobject.h @@ -60,33 +60,33 @@ class QAxObject : public QObject, public QAxBase friend class QAxEventSink; Q_OBJECT_FAKE public: - QObject* qObject() const Q_DECL_OVERRIDE { return static_cast<QObject *>(const_cast<QAxObject *>(this)); } - const char *className() const Q_DECL_OVERRIDE; + QObject* qObject() const override { return static_cast<QObject *>(const_cast<QAxObject *>(this)); } + const char *className() const override; - explicit QAxObject(QObject *parent = Q_NULLPTR); - explicit QAxObject(const QString &c, QObject *parent = Q_NULLPTR); - explicit QAxObject(IUnknown *iface, QObject *parent = Q_NULLPTR); + explicit QAxObject(QObject *parent = nullptr); + explicit QAxObject(const QString &c, QObject *parent = nullptr); + explicit QAxObject(IUnknown *iface, QObject *parent = nullptr); ~QAxObject(); bool doVerb(const QString &verb); protected: - void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE; - const QMetaObject *fallbackMetaObject() const Q_DECL_OVERRIDE; + void connectNotify(const QMetaMethod &signal) override; + const QMetaObject *fallbackMetaObject() const override; private: - const QMetaObject *parentMetaObject() const Q_DECL_OVERRIDE; + const QMetaObject *parentMetaObject() const override; }; template <> inline QAxObject *qobject_cast<QAxObject*>(const QObject *o) { - void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxObject") : Q_NULLPTR; + void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxObject") : nullptr; return reinterpret_cast<QAxObject*>(result); } template <> inline QAxObject *qobject_cast<QAxObject*>(QObject *o) { - void *result = o ? o->qt_metacast("QAxObject") : Q_NULLPTR; + void *result = o ? o->qt_metacast("QAxObject") : nullptr; return reinterpret_cast<QAxObject*>(result); } diff --git a/src/activeqt/container/qaxscript.h b/src/activeqt/container/qaxscript.h index 7185ece..f09b2fc 100644 --- a/src/activeqt/container/qaxscript.h +++ b/src/activeqt/container/qaxscript.h @@ -92,7 +92,7 @@ public: long queryInterface(const QUuid &, void**) const; protected: - bool initialize(IUnknown** ptr) Q_DECL_OVERRIDE; + bool initialize(IUnknown** ptr) override; private: QAxScript *script_code; @@ -159,7 +159,7 @@ class QAxScriptManager : public QObject Q_OBJECT public: - explicit QAxScriptManager(QObject *parent = Q_NULLPTR); + explicit QAxScriptManager(QObject *parent = nullptr); ~QAxScriptManager(); void addObject(QAxBase *object); @@ -222,7 +222,7 @@ inline QAxScriptEngine *QAxScript::scriptEngine() const inline bool QAxScriptEngine::isValid() const { - return engine != Q_NULLPTR; + return engine != nullptr; } inline QString QAxScriptEngine::scriptLanguage() const diff --git a/src/activeqt/container/qaxselect.h b/src/activeqt/container/qaxselect.h index 1d42a61..8921a17 100644 --- a/src/activeqt/container/qaxselect.h +++ b/src/activeqt/container/qaxselect.h @@ -61,7 +61,7 @@ class QAxSelect : public QDialog { Q_OBJECT public: - explicit QAxSelect(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags()); + explicit QAxSelect(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()); ~QAxSelect(); QString clsid() const; diff --git a/src/activeqt/container/qaxwidget.cpp b/src/activeqt/container/qaxwidget.cpp index 67485a1..5039123 100644 --- a/src/activeqt/container/qaxwidget.cpp +++ b/src/activeqt/container/qaxwidget.cpp @@ -473,7 +473,7 @@ static const wchar_t *qaxatom = L"QAxContainer4_Atom"; class QAxNativeEventFilter : public QAbstractNativeEventFilter { public: - bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE; + bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override; }; Q_GLOBAL_STATIC(QAxNativeEventFilter, s_nativeEventFilter) @@ -752,7 +752,7 @@ void QAxClientSite::releaseAll() { if (m_spOleControl) m_spOleControl->Release(); - m_spOleControl = Q_NULLPTR; + m_spOleControl = nullptr; if (m_spOleObject) { m_spOleObject->SetClientSite(0); m_spOleObject->Unadvise(m_dwOleObject); diff --git a/src/activeqt/container/qaxwidget.h b/src/activeqt/container/qaxwidget.h index 02b5315..3a9f19e 100644 --- a/src/activeqt/container/qaxwidget.h +++ b/src/activeqt/container/qaxwidget.h @@ -66,51 +66,51 @@ class QAxWidget : public QWidget, public QAxBase { Q_OBJECT_FAKE public: - QObject* qObject() const Q_DECL_OVERRIDE { return const_cast<QAxWidget *>(this); } - const char *className() const Q_DECL_OVERRIDE; + QObject* qObject() const override { return const_cast<QAxWidget *>(this); } + const char *className() const override; - explicit QAxWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); - explicit QAxWidget(const QString &c, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); - explicit QAxWidget(IUnknown *iface, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); + explicit QAxWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + explicit QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + explicit QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); ~QAxWidget(); - void clear() Q_DECL_OVERRIDE; + void clear() override; bool doVerb(const QString &verb); - QSize sizeHint() const Q_DECL_OVERRIDE; - QSize minimumSizeHint() const Q_DECL_OVERRIDE; + QSize sizeHint() const override; + QSize minimumSizeHint() const override; virtual QAxAggregated *createAggregate(); protected: - bool initialize(IUnknown **) Q_DECL_OVERRIDE; + bool initialize(IUnknown **) override; virtual bool createHostWindow(bool); bool createHostWindow(bool, const QByteArray&); - void changeEvent(QEvent *e) Q_DECL_OVERRIDE; - void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE; + void changeEvent(QEvent *e) override; + void resizeEvent(QResizeEvent *) override; virtual bool translateKeyEvent(int message, int keycode) const; - void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE; - const QMetaObject *fallbackMetaObject() const Q_DECL_OVERRIDE; + void connectNotify(const QMetaMethod &signal) override; + const QMetaObject *fallbackMetaObject() const override; private: friend class QAxClientSite; QAxClientSite *container; QAxWidgetPrivate *d; - const QMetaObject *parentMetaObject() const Q_DECL_OVERRIDE; + const QMetaObject *parentMetaObject() const override; }; template <> inline QAxWidget *qobject_cast<QAxWidget*>(const QObject *o) { - void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxWidget") : Q_NULLPTR; + void *result = o ? const_cast<QObject *>(o)->qt_metacast("QAxWidget") : nullptr; return static_cast<QAxWidget *>(result); } template <> inline QAxWidget *qobject_cast<QAxWidget*>(QObject *o) { - void *result = o ? o->qt_metacast("QAxWidget") : Q_NULLPTR; + void *result = o ? o->qt_metacast("QAxWidget") : nullptr; return static_cast<QAxWidget *>(result); } diff --git a/src/activeqt/control/qaxaggregated.h b/src/activeqt/control/qaxaggregated.h index 2192266..21add50 100644 --- a/src/activeqt/control/qaxaggregated.h +++ b/src/activeqt/control/qaxaggregated.h @@ -83,10 +83,10 @@ private: }; #define QAXAGG_IUNKNOWN \ - HRESULT WINAPI QueryInterface(REFIID iid, LPVOID *iface) Q_DECL_OVERRIDE \ + HRESULT WINAPI QueryInterface(REFIID iid, LPVOID *iface) override \ { return controllingUnknown()->QueryInterface(iid, iface); } \ - ULONG WINAPI AddRef() Q_DECL_OVERRIDE { return controllingUnknown()->AddRef(); } \ - ULONG WINAPI Release() Q_DECL_OVERRIDE { return controllingUnknown()->Release(); } \ + ULONG WINAPI AddRef() override { return controllingUnknown()->AddRef(); } \ + ULONG WINAPI Release() override { return controllingUnknown()->Release(); } \ QT_END_NAMESPACE diff --git a/src/activeqt/control/qaxfactory.h b/src/activeqt/control/qaxfactory.h index e2c327b..9beacbf 100644 --- a/src/activeqt/control/qaxfactory.h +++ b/src/activeqt/control/qaxfactory.h @@ -162,13 +162,13 @@ inline bool QAxFactory::stopServer() { \ if (key == className) \ return &Class::staticMetaObject; \ - return Q_NULLPTR; \ + return nullptr; \ } \ QObject *createObject(const QString &key) override \ { \ if (key == className) \ - return new Class(Q_NULLPTR); \ - return Q_NULLPTR; \ + return new Class(nullptr); \ + return nullptr; \ } \ QUuid classID(const QString &key) const override \ { \ @@ -202,19 +202,19 @@ public: : QAxFactory(libId, appId) {} - const QMetaObject *metaObject(const QString &) const Q_DECL_OVERRIDE { return &T::staticMetaObject; } - QStringList featureList() const Q_DECL_OVERRIDE { return QStringList(QLatin1String(T::staticMetaObject.className())); } - QObject *createObject(const QString &key) Q_DECL_OVERRIDE + const QMetaObject *metaObject(const QString &) const override { return &T::staticMetaObject; } + QStringList featureList() const override { return QStringList(QLatin1String(T::staticMetaObject.className())); } + QObject *createObject(const QString &key) override { const QMetaObject &mo = T::staticMetaObject; if (key != QLatin1String(mo.className())) - return Q_NULLPTR; + return nullptr; if (!qstrcmp(mo.classInfo(mo.indexOfClassInfo("Creatable")).value(), "no")) - return Q_NULLPTR; - return new T(Q_NULLPTR); + return nullptr; + return new T(nullptr); } - void registerClass(const QString &key, QSettings *settings) const Q_DECL_OVERRIDE + void registerClass(const QString &key, QSettings *settings) const override { const QStringList categories = getImplementedCategories(); @@ -225,7 +225,7 @@ public: } } - void unregisterClass(const QString &key, QSettings *settings) const Q_DECL_OVERRIDE + void unregisterClass(const QString &key, QSettings *settings) const override { const QStringList categories = getImplementedCategories(); @@ -256,7 +256,7 @@ private: QAxFactoryList() \ : QAxFactory(IDTypeLib, IDApp) \ { \ - QAxFactory *factory = Q_NULLPTR; \ + QAxFactory *factory = nullptr; \ QStringList keys; \ QStringList::Iterator it; \ @@ -282,47 +282,47 @@ private: #define QAXFACTORY_END() \ } \ - ~QAxFactoryList() Q_DECL_OVERRIDE { qDeleteAll(factories); } \ - QStringList featureList() const Q_DECL_OVERRIDE { return factoryKeys; } \ - const QMetaObject *metaObject(const QString&key) const Q_DECL_OVERRIDE { \ + ~QAxFactoryList() override { qDeleteAll(factories); } \ + QStringList featureList() const override { return factoryKeys; } \ + const QMetaObject *metaObject(const QString&key) const override { \ QAxFactory *f = factories[key]; \ - return f ? f->metaObject(key) : Q_NULLPTR; \ + return f ? f->metaObject(key) : nullptr; \ } \ - QObject *createObject(const QString &key) Q_DECL_OVERRIDE { \ + QObject *createObject(const QString &key) override { \ if (!creatable.value(key)) \ - return Q_NULLPTR; \ + return nullptr; \ QAxFactory *f = factories[key]; \ - return f ? f->createObject(key) : Q_NULLPTR; \ + return f ? f->createObject(key) : nullptr; \ } \ - QUuid classID(const QString &key) const Q_DECL_OVERRIDE { \ + QUuid classID(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->classID(key) : QUuid(); \ } \ - QUuid interfaceID(const QString &key) const Q_DECL_OVERRIDE { \ + QUuid interfaceID(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->interfaceID(key) : QUuid(); \ } \ - QUuid eventsID(const QString &key) const Q_DECL_OVERRIDE { \ + QUuid eventsID(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->eventsID(key) : QUuid(); \ } \ - void registerClass(const QString &key, QSettings *s) const Q_DECL_OVERRIDE { \ + void registerClass(const QString &key, QSettings *s) const override { \ QAxFactory *f = factories.value(key); \ if (f) f->registerClass(key, s); \ } \ - void unregisterClass(const QString &key, QSettings *s) const Q_DECL_OVERRIDE { \ + void unregisterClass(const QString &key, QSettings *s) const override { \ QAxFactory *f = factories.value(key); \ if (f) f->unregisterClass(key, s); \ } \ - QString exposeToSuperClass(const QString &key) const Q_DECL_OVERRIDE { \ + QString exposeToSuperClass(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->exposeToSuperClass(key) : QString(); \ } \ - bool stayTopLevel(const QString &key) const Q_DECL_OVERRIDE { \ + bool stayTopLevel(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->stayTopLevel(key) : false; \ } \ - bool hasStockEvents(const QString &key) const Q_DECL_OVERRIDE { \ + bool hasStockEvents(const QString &key) const override { \ QAxFactory *f = factories.value(key); \ return f ? f->hasStockEvents(key) : false; \ } \ diff --git a/src/activeqt/control/qaxserverbase.cpp b/src/activeqt/control/qaxserverbase.cpp index bfc4fc0..d46ddda 100644 --- a/src/activeqt/control/qaxserverbase.cpp +++ b/src/activeqt/control/qaxserverbase.cpp @@ -151,7 +151,7 @@ class QAxServerBase : #if defined Q_CC_GNU # if (__W32API_MAJOR_VERSION < 2 || (__W32API_MAJOR_VERSION == 2 && __W32API_MINOR_VERSION < 5)) public IViewObject, // this should not be needed as IViewObject2 is meant to inherit from this, - // untill the mingw headers are fixed this will need to stay. + // until the mingw headers are fixed this will need to stay. # endif #endif public IViewObject2, @@ -816,7 +816,7 @@ LRESULT QT_WIN_CALLBACK axs_FilterProc(int nCode, WPARAM wParam, LPARAM lParam) class QAxWinEventFilter : public QAbstractNativeEventFilter { public: - bool nativeEventFilter(const QByteArray &, void *message, long *) Q_DECL_OVERRIDE; + bool nativeEventFilter(const QByteArray &, void *message, long *) override; }; bool QAxWinEventFilter::nativeEventFilter(const QByteArray &, void *message, long *) @@ -2519,7 +2519,7 @@ HRESULT WINAPI QAxServerBase::Invoke(DISPID dispidMember, REFIID riid, vt = QVariant::Int; varp[0] = QVariant(vt); if (varp[0].type() == QVariant::Invalid) - argv[0] = Q_NULLPTR; + argv[0] = nullptr; else argv[0] = const_cast<void*>(varp[0].constData()); } diff --git a/src/activeqt/doc/src/activeqt-index.qdoc b/src/activeqt/doc/src/activeqt-index.qdoc index 2fba3ea..7920bdc 100644 --- a/src/activeqt/doc/src/activeqt-index.qdoc +++ b/src/activeqt/doc/src/activeqt-index.qdoc @@ -106,9 +106,9 @@ \li \l{Dot Net Example (ActiveQt)} \li \l{OpenGL Example (ActiveQt)} \li \l{Hierarchy Example (ActiveQt)} + \li \l{Media Player Example (ActiveQt)} \li \l{Menus Example (ActiveQt)} \li \l{Wrapper Example (ActiveQt)} \li \l{Simple Example (ActiveQt)} - \li \l{Web Browser Example (ActiveQt)} \endlist */ diff --git a/src/activeqt/doc/src/qtaxcontainer.qdoc b/src/activeqt/doc/src/qtaxcontainer.qdoc index 7d79372..ba73467 100644 --- a/src/activeqt/doc/src/qtaxcontainer.qdoc +++ b/src/activeqt/doc/src/qtaxcontainer.qdoc @@ -199,7 +199,7 @@ object and its subobjects; note that not all of the COM object's APIs might be available. - See the \l{activeqt/webbrowser}{Webbrowser} example for more information. + See the \l{activeqt/mediaplayer}{Media Player} example for more information. \section2 Calling Function Through a Script Engine diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp index 62bad32..ffbe52c 100644 --- a/src/activeqt/shared/qaxtypes.cpp +++ b/src/activeqt/shared/qaxtypes.cpp @@ -643,7 +643,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type if (out) { qWarning().noquote() << msgOutParameterNotSupported("records"); arg.vt = VT_EMPTY; - arg.byref = Q_NULLPTR; + arg.byref = nullptr; return false; } arg.vt = VT_RECORD; @@ -663,7 +663,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type if (out) { qWarning().noquote() << msgOutParameterNotSupported(qvar.typeName()); arg.vt = VT_EMPTY; - arg.byref = Q_NULLPTR; + arg.byref = nullptr; return false; } arg.vt = VT_DISPATCH; @@ -679,7 +679,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type if (out) { qWarning().noquote() << msgOutParameterNotSupported(qvar.typeName()); arg.vt = VT_EMPTY; - arg.byref = Q_NULLPTR; + arg.byref = nullptr; return false; } arg.vt = VT_UNKNOWN; @@ -691,7 +691,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type if (out) { qWarning().noquote() << msgOutParameterNotSupported("subtype"); arg.vt = VT_EMPTY; - arg.byref = Q_NULLPTR; + arg.byref = nullptr; return false; } arg.vt = VT_DISPATCH; @@ -707,7 +707,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type if (out) { qWarning().noquote() << msgOutParameterNotSupported("subtype"); arg.vt = VT_EMPTY; - arg.byref = Q_NULLPTR; + arg.byref = nullptr; return false; } QAxObject *object = *(QAxObject**)qvar.constData(); diff --git a/src/activeqt/shared/qaxutils.cpp b/src/activeqt/shared/qaxutils.cpp index bf5b99b..c41b321 100644 --- a/src/activeqt/shared/qaxutils.cpp +++ b/src/activeqt/shared/qaxutils.cpp @@ -99,14 +99,8 @@ static void addRectToHrgn(HRGN &winRegion, const QRect &r) HRGN qaxHrgnFromQRegion(QRegion region, const QWindow *window) { - region = QHighDpi::toNativeLocalRegion(region, window); HRGN hRegion = CreateRectRgn(0, 0, 0, 0); - if (region.rectCount() == 1) { - addRectToHrgn(hRegion, region.boundingRect()); - return hRegion; - } - const QVector<QRect> &rects = region.rects(); - for (const QRect &rect : rects) + for (const QRect &rect : QHighDpi::toNativeLocalRegion(region, window)) addRectToHrgn(hRegion, rect); return hRegion; } diff --git a/tests/manual/testcontrol/main.cpp b/tests/manual/testcontrol/main.cpp index f8fd3e6..7fca250 100644 --- a/tests/manual/testcontrol/main.cpp +++ b/tests/manual/testcontrol/main.cpp @@ -55,7 +55,7 @@ class QTestControl : public QMainWindow Q_CLASSINFO("EventsID", "{E1816BBA-BF5D-4A31-9855-D6BA43205510}") public: - explicit QTestControl(QWidget *parent = Q_NULLPTR); + explicit QTestControl(QWidget *parent = nullptr); public slots: void appendText(const QString &t) { m_logWindow->appendPlainText(t); } diff --git a/tools/dumpcpp/main.cpp b/tools/dumpcpp/main.cpp index 1f0cca8..8a37f33 100644 --- a/tools/dumpcpp/main.cpp +++ b/tools/dumpcpp/main.cpp @@ -925,7 +925,7 @@ static QByteArrayList vTableOnlyStubsFromTypeLib(ITypeLib *typelib, const QStrin for (UINT i = 0, typeCount = typelib->GetTypeInfoCount(); i < typeCount; ++i) { TYPEKIND typekind; if (SUCCEEDED(typelib->GetTypeInfoType(i, &typekind)) && typekind == TKIND_INTERFACE) { - ITypeInfo *typeinfo = Q_NULLPTR; + ITypeInfo *typeinfo = nullptr; if (SUCCEEDED(typelib->GetTypeInfo(i, &typeinfo) && typeinfo)) { result.append(nameSpacePrefix + classNameFromTypeInfo(typeinfo)); typeinfo->Release(); @@ -949,7 +949,7 @@ bool generateTypeLibrary(QString typeLibFile, QString outname, QString libName = nameSpace; if (libName.isEmpty()) { - BSTR nameString = Q_NULLPTR; + BSTR nameString = nullptr; if (SUCCEEDED(typelib->GetDocumentation(-1, &nameString, 0, 0, 0))) { libName = QString::fromWCharArray(nameString); SysFreeString(nameString); diff --git a/tools/testcon/mainwindow.cpp b/tools/testcon/mainwindow.cpp index 682c8e5..3ff0016 100644 --- a/tools/testcon/mainwindow.cpp +++ b/tools/testcon/mainwindow.cpp @@ -65,14 +65,14 @@ static const ScriptLanguage scriptLanguages[] = { {"Python", ".py"} }; -MainWindow *MainWindow::m_instance = Q_NULLPTR; +MainWindow *MainWindow::m_instance = nullptr; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) - , m_dlgInvoke(Q_NULLPTR) - , m_dlgProperties(Q_NULLPTR) - , m_dlgAmbient(Q_NULLPTR) - , m_scripts(Q_NULLPTR) + , m_dlgInvoke(nullptr) + , m_dlgProperties(nullptr) + , m_dlgAmbient(nullptr) + , m_scripts(nullptr) { setupUi(this); MainWindow::m_instance = this; // Logging handler needs the UI @@ -99,7 +99,7 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { - MainWindow::m_instance = Q_NULLPTR; + MainWindow::m_instance = nullptr; } QAxWidget *MainWindow::activeAxWidget() const diff --git a/tools/testcon/mainwindow.h b/tools/testcon/mainwindow.h index 84cd2ce..7e6575b 100644 --- a/tools/testcon/mainwindow.h +++ b/tools/testcon/mainwindow.h @@ -59,7 +59,7 @@ public: bool loadScript(const QString &file); protected: - void closeEvent(QCloseEvent *) Q_DECL_OVERRIDE; + void closeEvent(QCloseEvent *) override; public slots: void appendLogText(const QString &); |