From 8d6566b68b6cfa0c6f45cf7022f2d6a70888a978 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 4 Sep 2012 18:03:47 +0200 Subject: [PATCH 1/8] QtQuick 2 Application Wizard This patch adds a new variant of the good old ugly QmlApplicationViewer wizard. The new one is QQuickView based, and thus targets QtQuick2 Change-Id: I049223f644029e75bd15120b003c0ce4907a547a Reviewed-by: Thomas Hartmann Reviewed-by: Alessandro Portale --- share/qtcreator/templates/qtquick2app/app.pro | 24 ++++++ .../qtcreator/templates/qtquick2app/main.cpp | 13 ++++ .../qtquick2app/qml/app/qtquick20/main.qml | 16 ++++ .../qtquick2applicationviewer.cpp | 75 +++++++++++++++++++ .../qtquick2applicationviewer.h | 32 ++++++++ .../qtquick2applicationviewer.pri | 11 +++ .../qt4projectmanager/qt4projectmanager.cpp | 4 +- .../qt4projectmanager/wizards/qtquickapp.cpp | 59 +++++++++------ .../qt4projectmanager/wizards/qtquickapp.h | 8 +- .../wizards/qtquickappwizard.cpp | 22 +++++- .../wizards/qtquickappwizard.h | 5 +- tests/manual/appwizards/main.cpp | 9 +++ 12 files changed, 249 insertions(+), 29 deletions(-) create mode 100644 share/qtcreator/templates/qtquick2app/app.pro create mode 100644 share/qtcreator/templates/qtquick2app/main.cpp create mode 100644 share/qtcreator/templates/qtquick2app/qml/app/qtquick20/main.qml create mode 100644 share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.pri diff --git a/share/qtcreator/templates/qtquick2app/app.pro b/share/qtcreator/templates/qtquick2app/app.pro new file mode 100644 index 00000000000..df37cf767b2 --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/app.pro @@ -0,0 +1,24 @@ +# Add more folders to ship with the application, here +# DEPLOYMENTFOLDERS # +folder_01.source = qml/app +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 +# DEPLOYMENTFOLDERS_END # + +# Additional import path used to resolve QML modules in Creator's code model +# QML_IMPORT_PATH # +QML_IMPORT_PATH = + +# If your application uses the Qt Mobility libraries, uncomment the following +# lines and add the respective components to the MOBILITY variable. +# CONFIG += mobility +# MOBILITY += + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +# REMOVE_NEXT_LINE (wizard will remove the include and append deployment.pri to qmlapplicationviewer.pri, instead) # +include(../shared/deployment.pri) +qtcAddDeployment() diff --git a/share/qtcreator/templates/qtquick2app/main.cpp b/share/qtcreator/templates/qtquick2app/main.cpp new file mode 100644 index 00000000000..fb3846ec627 --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/main.cpp @@ -0,0 +1,13 @@ +#include +#include "qtquick2applicationviewer.h" + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + viewer.setMainQmlFile(QStringLiteral("qml/app/qtquick20/main.qml")); // MAINQML + viewer.showExpanded(); + + return app.exec(); +} diff --git a/share/qtcreator/templates/qtquick2app/qml/app/qtquick20/main.qml b/share/qtcreator/templates/qtquick2app/qml/app/qtquick20/main.qml new file mode 100644 index 00000000000..897812a6cb4 --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/qml/app/qtquick20/main.qml @@ -0,0 +1,16 @@ +import QtQuick 2.0 + +Rectangle { + width: 360 + height: 360 + Text { + text: qsTr("Hello World") + anchors.centerIn: parent + } + MouseArea { + anchors.fill: parent + onClicked: { + Qt.quit(); + } + } +} diff --git a/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000000..4288f1c26ec --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,75 @@ +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif !defined(Q_OS_ANDROID) + const QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); + +#ifdef Q_OS_ANDROID + engine()->setBaseUrl(QUrl::fromLocalFile("/")); +#endif +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) + showFullScreen(); +#else + show(); +#endif +} diff --git a/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.h b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000000..6eee3c89b9b --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,32 @@ +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.pri b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000000..5123a2567e2 --- /dev/null +++ b/share/qtcreator/templates/qtquick2app/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,11 @@ +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index c428be4e497..6604ebe4b20 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -265,7 +265,9 @@ ProjectExplorer::Project *Qt4Manager::openProject(const QString &fileName, QStri } } - const QtQuickApp qtQuickApp; + QtQuickApp qtQuickApp; + updateBoilerPlateCodeFiles(&qtQuickApp, canonicalFilePath); + qtQuickApp.setComponentSet(QtQuickApp::QtQuick20Components); updateBoilerPlateCodeFiles(&qtQuickApp, canonicalFilePath); const Html5App html5App; updateBoilerPlateCodeFiles(&html5App, canonicalFilePath); diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp index 91849d5ab37..eddb9bbd197 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp @@ -45,11 +45,6 @@ namespace Internal { const QString qmldir(QLatin1String("qmldir")); const QString qmldir_plugin(QLatin1String("plugin")); -const QString appViewerBaseName(QLatin1String("qmlapplicationviewer")); -const QString appViewerPriFileName(appViewerBaseName + QLatin1String(".pri")); -const QString appViewerCppFileName(appViewerBaseName + QLatin1String(".cpp")); -const QString appViewerHFileName(appViewerBaseName + QLatin1String(".h")); -const QString appViewerOriginsSubDir(appViewerBaseName + QLatin1Char('/')); QmlModule::QmlModule(const QString &uri, const QFileInfo &rootDir, const QFileInfo &qmldir, bool isExternal, QtQuickApp *qtQuickApp) @@ -177,7 +172,7 @@ QString QtQuickApp::pathExtended(int fileType) const const QString qmlSubDir = QLatin1String("qml/") + (importQmlFile ? m_mainQmlFile.dir().dirName() : projectName()) + QLatin1Char('/'); - const QString appViewerTargetSubDir = appViewerOriginsSubDir; + const QString appViewerTargetSubDir = appViewerOriginSubDir(); const QString mainQmlFile = QLatin1String("main.qml"); const QString mainPageQmlFile = QLatin1String("MainPage.qml"); @@ -196,12 +191,12 @@ QString QtQuickApp::pathExtended(int fileType) const case MainQmlOrigin: return qmlOriginDir + mainQmlFile; case MainPageQml: return pathBase + qmlSubDir + mainPageQmlFile; case MainPageQmlOrigin: return qmlOriginDir + mainPageQmlFile; - case AppViewerPri: return pathBase + appViewerTargetSubDir + appViewerPriFileName; - case AppViewerPriOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerPriFileName; - case AppViewerCpp: return pathBase + appViewerTargetSubDir + appViewerCppFileName; - case AppViewerCppOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerCppFileName; - case AppViewerH: return pathBase + appViewerTargetSubDir + appViewerHFileName; - case AppViewerHOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerHFileName; + case AppViewerPri: return pathBase + appViewerTargetSubDir + fileName(AppViewerPri); + case AppViewerPriOrigin: return originsRoot() + appViewerOriginSubDir() + fileName(AppViewerPri); + case AppViewerCpp: return pathBase + appViewerTargetSubDir + fileName(AppViewerCpp); + case AppViewerCppOrigin: return originsRoot() + appViewerOriginSubDir() + fileName(AppViewerCpp); + case AppViewerH: return pathBase + appViewerTargetSubDir + fileName(AppViewerH); + case AppViewerHOrigin: return originsRoot() + appViewerOriginSubDir() + fileName(AppViewerH); case QmlDir: return pathBase + qmlSubDir; case QmlDirProFileRelative: return importQmlFile ? appProFilePath.relativeFilePath(m_mainQmlFile.canonicalPath()) : QString(qmlSubDir).remove(qmlSubDir.length() - 1, 1); @@ -213,7 +208,8 @@ QString QtQuickApp::pathExtended(int fileType) const QString QtQuickApp::originsRoot() const { - return templatesRoot() + QLatin1String("qtquickapp/"); + const bool isQtQuick2 = m_componentSet == QtQuick20Components; + return templatesRoot() + QLatin1String(isQtQuick2 ? "qtquick2app/" : "qtquickapp/"); } QString QtQuickApp::mainWindowClassName() const @@ -370,6 +366,27 @@ const QList QtQuickApp::modules() const return m_modules; } +QString QtQuickApp::appViewerBaseName() const +{ + return QLatin1String(m_componentSet == QtQuick20Components ? + "qtquick2applicationviewer" : "qmlapplicationviewer"); +} + +QString QtQuickApp::fileName(QtQuickApp::ExtendedFileType type) const +{ + switch (type) { + case AppViewerPri: return appViewerBaseName() + QLatin1String(".pri"); + case AppViewerH: return appViewerBaseName() + QLatin1String(".h"); + case AppViewerCpp: return appViewerBaseName() + QLatin1String(".cpp"); + default: return QString(); + } +} + +QString QtQuickApp::appViewerOriginSubDir() const +{ + return appViewerBaseName() + QLatin1Char('/'); +} + QByteArray QtQuickApp::generateFileExtended(int fileType, bool *versionAndCheckSum, QString *comment, QString *errorMessage) const { @@ -402,7 +419,7 @@ QByteArray QtQuickApp::generateFileExtended(int fileType, int QtQuickApp::stubVersionMinor() const { - return StubVersion; + return m_componentSet == QtQuick20Components ? 1 : 22; } QList QtQuickApp::updateableFiles(const QString &mainProFile) const @@ -412,21 +429,21 @@ QList QtQuickApp::updateableFiles(const QString &main int fileType; QString fileName; } files[] = { - {QtQuickAppGeneratedFileInfo::AppViewerPriFile, appViewerPriFileName}, - {QtQuickAppGeneratedFileInfo::AppViewerHFile, appViewerHFileName}, - {QtQuickAppGeneratedFileInfo::AppViewerCppFile, appViewerCppFileName} + {QtQuickAppGeneratedFileInfo::AppViewerPriFile, fileName(AppViewerPri)}, + {QtQuickAppGeneratedFileInfo::AppViewerHFile, fileName(AppViewerH)}, + {QtQuickAppGeneratedFileInfo::AppViewerCppFile, fileName(AppViewerCpp)} }; const QFileInfo mainProFileInfo(mainProFile); const int size = sizeof(files) / sizeof(files[0]); for (int i = 0; i < size; ++i) { const QString fileName = mainProFileInfo.dir().absolutePath() - + QLatin1Char('/') + appViewerOriginsSubDir + files[i].fileName; + + QLatin1Char('/') + appViewerOriginSubDir() + files[i].fileName; if (!QFile::exists(fileName)) continue; QtQuickAppGeneratedFileInfo file; file.fileType = files[i].fileType; file.fileInfo = QFileInfo(fileName); - file.currentVersion = AbstractMobileApp::makeStubVersion(QtQuickApp::StubVersion); + file.currentVersion = AbstractMobileApp::makeStubVersion(stubVersionMinor()); result.append(file); } if (result.count() != size) @@ -449,13 +466,13 @@ QString QtQuickApp::componentSetDir(ComponentSet componentSet) const switch (componentSet) { case Meego10Components: return QLatin1String("meego10"); + case QtQuick20Components: + return QLatin1String("qtquick20"); case QtQuick10Components: default: return QLatin1String("qtquick10"); } } -const int QtQuickApp::StubVersion = 22; - } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.h b/src/plugins/qt4projectmanager/wizards/qtquickapp.h index 6696aafa492..22d60423e40 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.h @@ -115,7 +115,8 @@ public: enum ComponentSet { QtQuick10Components, - Meego10Components + Meego10Components, + QtQuick20Components }; QtQuickApp(); @@ -138,6 +139,11 @@ public: static const int StubVersion; +protected: + virtual QString appViewerBaseName() const; + QString fileName(ExtendedFileType type) const; + QString appViewerOriginSubDir() const; + private: virtual QByteArray generateFileExtended(int fileType, bool *versionAndCheckSum, QString *comment, QString *errorMessage) const; diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp index f599a17d064..0211a6ec628 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp @@ -72,7 +72,7 @@ QtQuickAppWizardDialog::QtQuickAppWizardDialog(QWidget *parent, QtQuickAppWizard::Kind kind) : AbstractMobileAppWizardDialog(parent, QtSupport::QtVersionNumber(4, 7, 0), - QtSupport::QtVersionNumber(4, INT_MAX, INT_MAX), parameters) + QtSupport::QtVersionNumber(5, INT_MAX, INT_MAX), parameters) { setWindowTitle(tr("New Qt Quick Application")); setIntroDescription(tr("This wizard generates a Qt Quick application project.")); @@ -143,13 +143,23 @@ void QtQuickAppWizard::createInstances(ExtensionSystem::IPlugin *plugin) basicFeatures = Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_1); parameter = base; - parameter.setDisplayName(tr("Qt Quick Application (Built-in Elements)")); - parameter.setDescription(basicDescription + tr("The built-in elements in the QtQuick namespace allow " + parameter.setDisplayName(tr("Qt Quick 1 Application (Built-in Elements)")); + parameter.setDescription(basicDescription + tr("The built-in elements in the QtQuick 1 namespace allow " "you to write cross-platform applications with " "a custom look and feel.\n\nRequires Qt 4.7.0 or newer.")); parameter.setRequiredFeatures(basicFeatures); list << parameter; + parameter = base; + parameter.setDisplayName(tr("Qt Quick 2 Application (Built-in Elements)")); + parameter.setDescription(tr("Creates a Qt Quick application project that can contain " + "both QML and C++ code and includes a QQuickView.\n\n" + "The built-in elements in the QtQuick 2 namespace allow " + "you to write cross-platform applications with " + "a custom look and feel.\n\nRequires Qt 5.0 or newer.")); + parameter.setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2)); + list << parameter; + parameter = base; parameter.setDisplayName(tr("Qt Quick Application for MeeGo Harmattan")); parameter.setDescription(basicDescription + tr("The Qt Quick Components for MeeGo Harmattan are " @@ -173,7 +183,7 @@ void QtQuickAppWizard::createInstances(ExtensionSystem::IPlugin *plugin) QList wizardList = Core::createMultipleBaseFileWizardInstances(list, plugin); - Q_ASSERT(wizardList.count() == 3); + Q_ASSERT(wizardList.count() == 4); for (int i = 0; i < wizardList.count(); i++) { wizardList.at(i)->setQtQuickKind(Kind(i)); @@ -209,6 +219,10 @@ AbstractMobileAppWizardDialog *QtQuickAppWizard::createWizardDialogInternal(QWid d->app->setComponentSet(QtQuickApp::QtQuick10Components); d->app->setMainQml(QtQuickApp::ModeImport); break; + case QtQuick2_0: + d->app->setComponentSet(QtQuickApp::QtQuick20Components); + d->app->setMainQml(QtQuickApp::ModeGenerate); + break; default: qWarning() << "QtQuickAppWizard illegal subOption:" << qtQuickKind(); break; diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h index ae337b6912e..b82917d45c1 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h @@ -43,8 +43,9 @@ public: enum Kind { QtQuick1_1 = 0, - MeegoComponents = 1, - ImportQml = 2 + QtQuick2_0 = 1, + MeegoComponents = 2, + ImportQml = 3 }; QtQuickAppWizard(); diff --git a/tests/manual/appwizards/main.cpp b/tests/manual/appwizards/main.cpp index 532aecdb829..c89d76582e3 100644 --- a/tests/manual/appwizards/main.cpp +++ b/tests/manual/appwizards/main.cpp @@ -50,6 +50,15 @@ int main(int argc, char *argv[]) return 1; } + { + QtQuickApp sAppNew; + sAppNew.setProjectPath(projectPath); + sAppNew.setComponentSet(QtQuickApp::ComponentSetQtQuick2_0); + sAppNew.setProjectName(QLatin1String("new_qtquick2_app")); + if (!sAppNew.generateFiles(&errorMessage)) + return 1; + } + { QtQuickApp sAppImport01; sAppImport01.setProjectPath(projectPath); From f8954ab9621982e1ebbc89ea90f2d94c8efbbff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20N=C3=A4tterlund?= Date: Thu, 30 Aug 2012 16:37:29 +0200 Subject: [PATCH 2/8] QNX: Fixed compilation for BlackBerry QtQuick2 template Change-Id: I5c15c6c6ac69dbf46f676d4f330ed75a2f923c85 Reviewed-by: Thomas McGuire Reviewed-by: Alessandro Portale Reviewed-by: Sean Harmer Reviewed-by: Nicolas Arnaud-Cormos --- .../wizards/bb-qt5-quick2app/main.cpp | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/share/qtcreator/templates/wizards/bb-qt5-quick2app/main.cpp b/share/qtcreator/templates/wizards/bb-qt5-quick2app/main.cpp index 73140fdcc37..bfa891a896e 100644 --- a/share/qtcreator/templates/wizards/bb-qt5-quick2app/main.cpp +++ b/share/qtcreator/templates/wizards/bb-qt5-quick2app/main.cpp @@ -1,26 +1,18 @@ -#include -#include +#include #include +#include int main( int argc, char** argv ) { QGuiApplication app( argc, argv ); - QWindow *window = 0; - int exitCode = 0; + QQuickView view; + view.setResizeMode( QQuickView::SizeRootObjectToView ); + view.setSource( QUrl( "app/native/qml/main.qml" ) ); - QQuickView* view = new QQuickView(); - view->setResizeMode( QQuickView::SizeRootObjectToView ); - view->setSource( QUrl( "app/native/qml/main.qml" ) ); + QObject::connect( view.engine(), SIGNAL( quit() ), + QCoreApplication::instance(), SLOT( quit() ) ); + view.show(); - QDeclarativeEngine* engine = view->engine(); - QObject::connect( engine, SIGNAL(quit()), - QCoreApplication::instance(), SLOT(quit()) ); - window = view; - window->showMaximized(); - - exitCode = app.exec(); - - delete window; - return exitCode; + return app.exec(); } From a54056dacb21619f1265f3f063958f7a0604dfac Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 5 Sep 2012 08:20:06 +0200 Subject: [PATCH 3/8] CMakeProjectManager: Windows build fix. Profile p -> Kit k in #ifdef Q_OS_WIN. Change-Id: I6701b7c4c68770323d7b66ba2058861aa16f1cdc Reviewed-by: Friedemann Kleint --- src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp index b5c98e8c8b4..8fa8c0077f5 100644 --- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp @@ -425,7 +425,7 @@ void CMakeRunPage::initializePage() } else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) { #ifdef Q_OS_WIN if (cachedGenerator.isEmpty() || cachedGenerator == "MinGW Makefiles") - m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(p->displayName()), kitVariant); + m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(k->displayName()), kitVariant); #else if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles") m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), kitVariant); From 3cecc93f1ccd9ed4ac1aeb8a47a9561b9aea334e Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 5 Sep 2012 08:42:25 +0300 Subject: [PATCH 4/8] Fix Windows build Change-Id: Ia6efab53a04a54869c3ac8700eef5a64ffd95e7b Reviewed-by: Tobias Hunger From 7eb5080f25b06300ab97a5721969d03303be6e76 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 5 Sep 2012 10:06:39 +0300 Subject: [PATCH 5/8] GCC: Detect -std=c++11 and -std=gnu++11 as C++11 Change-Id: I9f968c976c40578bf6aeef2392b5c560775353ef Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/gcctoolchain.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index cdae6badcd4..61911262a4f 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -387,7 +387,8 @@ QByteArray GccToolChain::predefinedMacros(const QStringList &cxxflags) const ToolChain::CompilerFlags GccToolChain::compilerFlags(const QStringList &cxxflags) const { - if (cxxflags.contains("-std=c++0x") || cxxflags.contains("-std=gnu++0x")) + if (cxxflags.contains("-std=c++0x") || cxxflags.contains("-std=gnu++0x") || + cxxflags.contains("-std=c++11") || cxxflags.contains("-std=gnu++11")) return STD_CXX11; return NO_FLAGS; } From 777d809397daaf0ac57bde477ca9a246fe9b07d8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 5 Sep 2012 09:21:15 +0200 Subject: [PATCH 6/8] Make ToolChain::suggestedDebugger() const. Change-Id: Ic166f5b7af55b12a1578e130a29fbe81e5ecad0a Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/toolchain.cpp | 2 +- src/plugins/projectexplorer/toolchain.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 2a8ff0de051..678ad2bb8bb 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -124,7 +124,7 @@ QString ToolChain::id() const return d->m_id; } -Utils::FileName ToolChain::suggestedDebugger() +Utils::FileName ToolChain::suggestedDebugger() const { return ToolChainManager::instance()->defaultDebugger(targetAbi()); } diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 2f82c1ba8c5..8c4bb703a5a 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -73,7 +73,7 @@ public: QString id() const; virtual QList suggestedMkspecList() const { return QList(); } - virtual Utils::FileName suggestedDebugger(); + virtual Utils::FileName suggestedDebugger() const; virtual QString type() const = 0; virtual QString typeDisplayName() const = 0; From 77b3de44e2b08de779093e6b5ccb24847e50b9a8 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 5 Sep 2012 10:15:31 +0300 Subject: [PATCH 7/8] MSVC: Detect C++11 MSVC enables C++11 features by default. Only the version matters Change-Id: I5c0c27326a876c7755a7608692fb03b8798b5634 Reviewed-by: Tobias Hunger Reviewed-by: Friedemann Kleint --- src/plugins/projectexplorer/abstractmsvctoolchain.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index 0017243a5a8..0eea022e2a0 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -98,7 +98,14 @@ QByteArray AbstractMsvcToolChain::predefinedMacros(const QStringList &cxxflags) ToolChain::CompilerFlags AbstractMsvcToolChain::compilerFlags(const QStringList &cxxflags) const { Q_UNUSED(cxxflags); - return NO_FLAGS; + + switch (m_abi.osFlavor()) { + case ProjectExplorer::Abi::WindowsMsvc2010Flavor: + case ProjectExplorer::Abi::WindowsMsvc2012Flavor: + return STD_CXX11; + default: + return NO_FLAGS; + } } QList AbstractMsvcToolChain::systemHeaderPaths() const From 948abf10aec2b8d1b6ab88f6fc0ac49b963a3564 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 5 Sep 2012 09:59:13 +0300 Subject: [PATCH 8/8] GCC: Actually use sysroot for header path detection Function signature was prepared for that on 4c6b794774b3d18b57fc1bf3bce65532b7d9337e but it wasn't really used Change-Id: I1ee7059a00f0441d42a117b8f8d2c8c776d93815 Reviewed-by: Tobias Hunger Reviewed-by: Daniel Teske --- src/plugins/autotoolsprojectmanager/autotoolsproject.cpp | 5 +++-- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 5 +++-- src/plugins/genericprojectmanager/genericproject.cpp | 6 +++--- src/plugins/projectexplorer/abstractmsvctoolchain.cpp | 3 ++- src/plugins/projectexplorer/abstractmsvctoolchain.h | 2 +- src/plugins/projectexplorer/gcctoolchain.cpp | 8 ++++---- src/plugins/projectexplorer/gcctoolchain.h | 4 ++-- src/plugins/projectexplorer/toolchain.h | 2 +- src/plugins/qt4projectmanager/qt4project.cpp | 2 +- 9 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index ff4b78966cc..4019ef016fb 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp @@ -418,9 +418,10 @@ void AutotoolsProject::updateCppCodeModel() QByteArray macros; if (activeTarget()) { - ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(activeTarget()->kit()); + ProjectExplorer::Kit *k = activeTarget()->kit(); + ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k); if (tc) { - const QList allHeaderPaths = tc->systemHeaderPaths(); + const QList allHeaderPaths = tc->systemHeaderPaths(SysRootKitInformation::sysRoot(k)); foreach (const HeaderPath &headerPath, allHeaderPaths) { if (headerPath.kind() == HeaderPath::FrameworkHeaderPath) allFrameworkPaths.append(headerPath.path()); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 239e46594a7..b536af7c821 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -286,7 +286,8 @@ bool CMakeProject::parseCMakeLists() createUiCodeModelSupport(); - ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(activeTarget()->kit()); + Kit *k = activeTarget()->kit(); + ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k); if (!tc) { emit buildTargetsChanged(); emit fileListChanged(); @@ -304,7 +305,7 @@ bool CMakeProject::parseCMakeLists() QStringList allFrameworkPaths; QList allHeaderPaths; - allHeaderPaths = tc->systemHeaderPaths(); + allHeaderPaths = tc->systemHeaderPaths(SysRootKitInformation::sysRoot(k)); foreach (const ProjectExplorer::HeaderPath &headerPath, allHeaderPaths) { if (headerPath.kind() == ProjectExplorer::HeaderPath::FrameworkHeaderPath) allFrameworkPaths.append(headerPath.path()); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index fbf0bbb2fbf..db8991b8aba 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -249,13 +249,13 @@ void GenericProject::refresh(RefreshOptions options) CPlusPlus::CppModelManagerInterface::ProjectPart::Ptr part( new CPlusPlus::CppModelManagerInterface::ProjectPart); - ToolChain *tc = activeTarget() ? - ToolChainKitInformation::toolChain(activeTarget()->kit()) : 0; + Kit *k = activeTarget() ? activeTarget()->kit() : KitManager::instance()->defaultKit(); + ToolChain *tc = k ? ToolChainKitInformation::toolChain(k) : 0; if (tc) { part->defines = tc->predefinedMacros(QStringList()); part->defines += '\n'; - foreach (const HeaderPath &headerPath, tc->systemHeaderPaths()) { + foreach (const HeaderPath &headerPath, tc->systemHeaderPaths(SysRootKitInformation::sysRoot(k))) { if (headerPath.kind() == HeaderPath::FrameworkHeaderPath) part->frameworkPaths.append(headerPath.path()); else diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index 0eea022e2a0..02d8b7f9e38 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -108,8 +108,9 @@ ToolChain::CompilerFlags AbstractMsvcToolChain::compilerFlags(const QStringList } } -QList AbstractMsvcToolChain::systemHeaderPaths() const +QList AbstractMsvcToolChain::systemHeaderPaths(const Utils::FileName &sysRoot) const { + Q_UNUSED(sysRoot); if (m_headerPaths.isEmpty()) { Utils::Environment env(m_lastEnvironment); addToEnvironment(env); diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.h b/src/plugins/projectexplorer/abstractmsvctoolchain.h index ef26aa401ce..f52bee76881 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.h +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.h @@ -53,7 +53,7 @@ public: QByteArray predefinedMacros(const QStringList &cxxflags) const; CompilerFlags compilerFlags(const QStringList &cxxflags) const; - QList systemHeaderPaths() const; + QList systemHeaderPaths(const Utils::FileName &sysRoot) const; void addToEnvironment(Utils::Environment &env) const; QString makeCommand() const; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 61911262a4f..93eaf2f9af7 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -148,12 +148,12 @@ static QByteArray gccPredefinedMacros(const FileName &gcc, const QStringList &ar return predefinedMacros; } -QList GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &env, const QString &sysrootPath) +QList GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &env, const FileName &sysrootPath) { QList systemHeaderPaths; QStringList arguments; if (!sysrootPath.isEmpty()) - arguments.append(QString::fromLatin1("--sysroot=%1").arg(sysrootPath)); + arguments.append(QString::fromLatin1("--sysroot=%1").arg(sysrootPath.toString())); arguments << QLatin1String("-xc++") << QLatin1String("-E") << QLatin1String("-v") @@ -393,13 +393,13 @@ ToolChain::CompilerFlags GccToolChain::compilerFlags(const QStringList &cxxflags return NO_FLAGS; } -QList GccToolChain::systemHeaderPaths() const +QList GccToolChain::systemHeaderPaths(const Utils::FileName &sysRoot) const { if (m_headerPaths.isEmpty()) { // Using a clean environment breaks ccache/distcc/etc. Environment env = Environment::systemEnvironment(); addToEnvironment(env); - m_headerPaths = gccHeaderPaths(m_compilerCommand, env.toStringList()); + m_headerPaths = gccHeaderPaths(m_compilerCommand, env.toStringList(), sysRoot); } return m_headerPaths; } diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index 45e32c8652d..37a99164792 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -64,7 +64,7 @@ public: QByteArray predefinedMacros(const QStringList &cxxflags) const; CompilerFlags compilerFlags(const QStringList &cxxflags) const; - QList systemHeaderPaths() const; + QList systemHeaderPaths(const Utils::FileName &sysRoot) const; void addToEnvironment(Utils::Environment &env) const; QString makeCommand() const; QList suggestedMkspecList() const; @@ -91,7 +91,7 @@ protected: virtual QList detectSupportedAbis() const; virtual QString detectVersion() const; - static QList gccHeaderPaths(const Utils::FileName &gcc, const QStringList &env, const QString &sysrootPath = QString()); + static QList gccHeaderPaths(const Utils::FileName &gcc, const QStringList &env, const Utils::FileName &sysrootPath); mutable QByteArray m_predefinedMacros; diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 8c4bb703a5a..276bd0bc291 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -88,7 +88,7 @@ public: STD_CXX11 = 1 }; virtual CompilerFlags compilerFlags(const QStringList &cxxflags) const = 0; - virtual QList systemHeaderPaths() const = 0; + virtual QList systemHeaderPaths(const Utils::FileName &sysRoot) const = 0; virtual void addToEnvironment(Utils::Environment &env) const = 0; virtual QString makeCommand() const = 0; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index c123adcdca2..f62bd9eff52 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -527,7 +527,7 @@ void Qt4Project::updateCppCodeModel() QList headers; if (tc) - headers = tc->systemHeaderPaths(); // todo pass cxxflags? + headers = tc->systemHeaderPaths(SysRootKitInformation::sysRoot(k)); // todo pass cxxflags? if (qtVersion) { headers.append(qtVersion->systemHeaderPathes(k)); }