diff --git a/dist/changes-4.10.0.md b/dist/changes-4.10.0.md index 6022f5aac9e..9ed43bf9e51 100644 --- a/dist/changes-4.10.0.md +++ b/dist/changes-4.10.0.md @@ -121,10 +121,14 @@ you can check out from the public Git repository. For example: ## Debugging * Added pretty printer for `QMargin` -* Fixed pretty printer for `std::vector` and `std::basic_string` with custom allocator -* Fixed pretty printer for `std::map::iterator` +* Fixed pretty printers for `QFile`, `QStandardItem`, + `std::vector` and `std::basic_string` with custom allocator, and `std::map::iterator` * Fixed issues with restoring layout (QTCREATORBUG-21669) +### LLDB + +* Fixed running with command line arguments with spaces (QTCREATORBUG-22811) + ### CDB * Fixed loading of custom debugging helpers (QTCREATORBUG-20481) @@ -152,6 +156,7 @@ you can check out from the public Git repository. For example: * Added all fonts from project directory to font selector (QDS-100) * Updated properties of `Flickable` * Improved handling of errors in state editor (QDS-695) +* Improved selection behavior (QDS-853) ## Version Control Systems @@ -188,6 +193,10 @@ you can check out from the public Git repository. For example: * Removed support for MIPS64 +### iOS + +* Fixed simulator detection with Xcode 11 (QTCREATORBUG-22757) + ### Remote Linux * Added deployment method that deploys everything that is installed by the build system diff --git a/src/libs/utils/proxyaction.cpp b/src/libs/utils/proxyaction.cpp index bc17dea5803..99595da3ced 100644 --- a/src/libs/utils/proxyaction.cpp +++ b/src/libs/utils/proxyaction.cpp @@ -25,6 +25,8 @@ #include "proxyaction.h" +#include "stringutils.h" + using namespace Utils; ProxyAction::ProxyAction(QObject *parent) : @@ -167,10 +169,9 @@ void ProxyAction::updateToolTipWithKeySequence() QString ProxyAction::stringWithAppendedShortcut(const QString &str, const QKeySequence &shortcut) { - QString s = str; - s.replace(QLatin1String("&&"), QLatin1String("&")); - return QString::fromLatin1("%1 %2"). - arg(s, shortcut.toString(QKeySequence::NativeText)); + const QString s = stripAccelerator(str); + return QString::fromLatin1("%1 %2") + .arg(s, shortcut.toString(QKeySequence::NativeText)); } ProxyAction *ProxyAction::proxyActionWithIcon(QAction *original, const QIcon &newIcon) diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index c5317e9eea2..6f641bead3f 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -94,7 +94,7 @@ void AndroidToolChain::addToEnvironment(Environment &env) const env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfigurations::currentConfig().toolchainHost()); const Utils::FilePath javaHome = AndroidConfigurations::currentConfig().openJDKLocation(); - if (!javaHome.exists()) { + if (javaHome.exists()) { env.set(QLatin1String("JAVA_HOME"), javaHome.toString()); const FilePath javaBin = javaHome.pathAppended("bin"); if (!Utils::contains(env.path(), [&javaBin](const Utils::FilePath &p) { return p == javaBin; })) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 9ac8b0bfb49..8befb49f8e0 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1302,7 +1302,7 @@ void BreakpointItem::setState(BreakpointState state) m_state = state; // FIXME: updateMarker() should recognize the need for icon changes. - if (state == BreakpointInserted) { + if (state == BreakpointInserted || state == BreakpointInsertionRequested) { destroyMarker(); updateMarker(); } diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index d3cfeebec83..66dc416f1ba 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -1583,8 +1584,7 @@ static QString removeWatchActionText(QString exp) exp.truncate(30); exp.append("..."); } - return WatchModel::tr("Remove Expression Evaluator for \"%1\"") - .arg(exp.replace('&', "&&")); + return WatchModel::tr("Remove Expression Evaluator for \"%1\"").arg(Utils::quoteAmpersands(exp)); } static void copyToClipboard(const QString &clipboardText) diff --git a/src/plugins/help/openpagesmodel.cpp b/src/plugins/help/openpagesmodel.cpp index d00600737e6..3587acfc096 100644 --- a/src/plugins/help/openpagesmodel.cpp +++ b/src/plugins/help/openpagesmodel.cpp @@ -56,8 +56,7 @@ QVariant OpenPagesModel::data(const QModelIndex &index, int role) const case Qt::ToolTipRole: return m_pages.at(index.row())->source().toString(); case Qt::DisplayRole: { - QString title = m_pages.at(index.row())->title(); - title.replace('&', "&&"); + const QString title = m_pages.at(index.row())->title(); return title.isEmpty() ? tr("(Untitled)") : title; } default: diff --git a/src/plugins/help/openpageswidget.cpp b/src/plugins/help/openpageswidget.cpp index a6d98bbb702..55b55353f24 100644 --- a/src/plugins/help/openpageswidget.cpp +++ b/src/plugins/help/openpageswidget.cpp @@ -29,6 +29,7 @@ #include "openpagesmodel.h" #include +#include #include #include @@ -86,10 +87,9 @@ void OpenPagesWidget::contextMenuRequested(QPoint pos) if (index.column() == 1) index = index.sibling(index.row(), 0); QMenu contextMenu; - QAction *closeEditor = contextMenu.addAction(tr("Close %1").arg(index.data() - .toString())); - QAction *closeOtherEditors = contextMenu.addAction(tr("Close All Except %1") - .arg(index.data().toString())); + const QString displayString = Utils::quoteAmpersands(index.data().toString()); + QAction *closeEditor = contextMenu.addAction(tr("Close %1").arg(displayString)); + QAction *closeOtherEditors = contextMenu.addAction(tr("Close All Except %1").arg(displayString)); if (model()->rowCount() == 1) { closeEditor->setEnabled(false); diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index db732fe9533..b9d943da112 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -67,11 +67,16 @@ namespace Internal { static const QLatin1String deviceTypeKey("Ios.device_type"); +static QString displayName(const SimulatorInfo &device) +{ + return QString("%1, %2").arg(device.name).arg(device.runtimeName); +} + static IosDeviceType toIosDeviceType(const SimulatorInfo &device) { IosDeviceType iosDeviceType(IosDeviceType::SimulatedDevice, device.identifier, - QString("%1, %2").arg(device.name).arg(device.runtimeName)); + displayName(device)); return iosDeviceType; } @@ -351,8 +356,7 @@ void IosDeviceTypeAspect::updateValues() m_deviceTypeComboBox->setVisible(showDeviceSelector); if (showDeviceSelector && m_deviceTypeModel.rowCount() == 0) { foreach (const SimulatorInfo &device, SimulatorControl::availableSimulators()) { - QStandardItem *item = new QStandardItem(QString("%1, %2").arg(device.name) - .arg(device.runtimeName)); + QStandardItem *item = new QStandardItem(Internal::displayName(device)); QVariant v; v.setValue(device); item->setData(v); diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp index ac8966eb78d..5ab67f70fd0 100644 --- a/src/plugins/ios/simulatorcontrol.cpp +++ b/src/plugins/ios/simulatorcontrol.cpp @@ -61,6 +61,7 @@ const char deviceTypeTag[] = "devicetypes"; const char devicesTag[] = "devices"; const char availabilityTag[] = "availability"; const char unavailabilityToken[] = "unavailable"; +const char availabilityTagNew[] = "isAvailable"; // at least since Xcode 10 const char identifierTag[] = "identifier"; const char runtimesTag[] = "runtimes"; const char nameTag[] = "name"; @@ -117,6 +118,13 @@ static bool launchSimulator(const QString &simUdid) { return QProcess::startDetached(simulatorAppPath, {"--args", "-CurrentDeviceUDID", simUdid}); } +static bool isAvailable(const QJsonObject &object) +{ + return object.contains(availabilityTagNew) + ? object.value(availabilityTagNew).toBool() + : !object.value(availabilityTag).toString().contains(unavailabilityToken); +} + static QList getAvailableDeviceTypes() { QList deviceTypes; @@ -127,7 +135,7 @@ static QList getAvailableDeviceTypes() const QJsonArray runtimesArray = doc.object().value(deviceTypeTag).toArray(); foreach (const QJsonValue deviceTypeValue, runtimesArray) { QJsonObject deviceTypeObject = deviceTypeValue.toObject(); - if (!deviceTypeObject.value(availabilityTag).toString().contains(unavailabilityToken)) { + if (isAvailable(deviceTypeObject)) { DeviceTypeInfo deviceType; deviceType.name = deviceTypeObject.value(nameTag).toString("unknown"); deviceType.identifier = deviceTypeObject.value(identifierTag).toString("unknown"); @@ -151,7 +159,7 @@ static QList getAvailableRuntimes() const QJsonArray runtimesArray = doc.object().value(runtimesTag).toArray(); foreach (const QJsonValue runtimeValue, runtimesArray) { QJsonObject runtimeObject = runtimeValue.toObject(); - if (!runtimeObject.value(availabilityTag).toString().contains(unavailabilityToken)) { + if (isAvailable(runtimeObject)) { RuntimeInfo runtime; runtime.name = runtimeObject.value(nameTag).toString("unknown"); runtime.build = runtimeObject.value(buildVersionTag).toString("unknown"); @@ -233,8 +241,7 @@ static QList getAllSimulatorDevices() device.identifier = deviceObject.value(udidTag).toString(); device.name = deviceObject.value(nameTag).toString(); device.runtimeName = runtime; - const QString availableStr = deviceObject.value(availabilityTag).toString(); - device.available = !availableStr.contains(unavailabilityToken); + device.available = isAvailable(deviceObject); device.state = deviceObject.value(stateTag).toString(); simulatorDevices.append(device); } diff --git a/src/plugins/python/CMakeLists.txt b/src/plugins/python/CMakeLists.txt index 7dd1f2fab5d..196188f01e0 100644 --- a/src/plugins/python/CMakeLists.txt +++ b/src/plugins/python/CMakeLists.txt @@ -1,5 +1,5 @@ add_qtc_plugin(Python - PLUGIN_DEPENDS Core QtSupport ProjectExplorer TextEditor + PLUGIN_DEPENDS Core ProjectExplorer TextEditor SOURCES python.qrc pythoneditor.cpp pythoneditor.h diff --git a/src/plugins/python/python.qbs b/src/plugins/python/python.qbs index f45d4a0fb79..56a5820528a 100644 --- a/src/plugins/python/python.qbs +++ b/src/plugins/python/python.qbs @@ -8,7 +8,6 @@ QtcPlugin { Depends { name: "Core" } Depends { name: "TextEditor" } - Depends { name: "QtSupport" } Depends { name: "ProjectExplorer" } Group { diff --git a/src/plugins/python/python_dependencies.pri b/src/plugins/python/python_dependencies.pri index 8ca62c74e76..5f2a87c2830 100644 --- a/src/plugins/python/python_dependencies.pri +++ b/src/plugins/python/python_dependencies.pri @@ -5,5 +5,4 @@ QTC_LIB_DEPENDS += \ QTC_PLUGIN_DEPENDS += \ coreplugin \ texteditor \ - qtsupport \ projectexplorer diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index 954e0401c4a..bfa836137f7 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -299,6 +299,13 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event) QAction *openEditorAction = menu.addAction(tr("Open Style Editor")); connect(openEditorAction, &QAction::triggered, openStyleEditor); + menu.addSeparator(); + auto insertKeyframes = [this, event]() { + insertKeyframe(globalToRaster(event->globalPos()).x(), true); + }; + QAction *insertKeyframeAction = menu.addAction(tr("Insert Keyframe")); + connect(insertKeyframeAction, &QAction::triggered, insertKeyframes); + menu.exec(event->globalPos()); } @@ -400,12 +407,14 @@ void GraphicsView::applyZoom(double x, double y, const QPoint &pivot) } } -void GraphicsView::insertKeyframe(double time) +void GraphicsView::insertKeyframe(double time, bool allVisibleCurves) { const auto itemList = items(); for (auto *item : itemList) { if (auto *curveItem = qgraphicsitem_cast(item)) { - if (curveItem->isUnderMouse()) + if (allVisibleCurves) + curveItem->insertKeyframeByTime(std::round(time)); + else if (curveItem->isUnderMouse()) curveItem->insertKeyframeByTime(std::round(time)); } } diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h index 15c8aeb75df..01dd0ca0261 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h @@ -124,7 +124,7 @@ protected: private: void applyZoom(double x, double y, const QPoint &pivot = QPoint()); - void insertKeyframe(double time); + void insertKeyframe(double time, bool allVisibleCurves = false); void deleteSelectedKeyframes(); diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp index c8b6057d875..cc337f25fc1 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp @@ -58,14 +58,15 @@ void Selector::mousePress(QMouseEvent *event, GraphicsView *view) if (view->hasActiveHandle()) return; - if (select(SelectionTool::Undefined, view->globalToScene(event->globalPos()), view)) - applyPreSelection(view); - m_mouseInit = event->globalPos(); m_mouseCurr = event->globalPos(); QPointF click = view->globalToScene(m_mouseInit); + if (!isOverSelectedKeyframe(click, view)) + if (select(SelectionTool::Undefined, click, view)) + applyPreSelection(view); + m_lasso = QPainterPath(click); m_lasso.closeSubpath(); @@ -119,6 +120,19 @@ void Selector::mouseRelease(QMouseEvent *event, GraphicsView *view) m_rect = QRectF(); } +bool Selector::isOverSelectedKeyframe(const QPointF &pos, GraphicsView *view) +{ + const auto itemList = view->items(); + for (auto *item : itemList) { + if (auto *frame = qgraphicsitem_cast(item)) { + QRectF itemRect = frame->mapRectToScene(frame->boundingRect()); + if (itemRect.contains(pos)) + return frame->selected(); + } + } + return false; +} + bool Selector::select(const SelectionTool &tool, const QPointF &pos, GraphicsView *view) { auto selectWidthTool = [this, tool](SelectionMode mode, const QPointF &pos, GraphicsView *view) { diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/selector.h b/src/plugins/qmldesigner/components/curveeditor/detail/selector.h index 1c955de5bef..4027cc87b1c 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/selector.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/selector.h @@ -54,6 +54,8 @@ public: void mouseRelease(QMouseEvent *event, GraphicsView *view); private: + bool isOverSelectedKeyframe(const QPointF &pos, GraphicsView *view); + bool select(const SelectionTool &tool, const QPointF &pos, GraphicsView *view); bool pressSelection(SelectionMode mode, const QPointF &pos, GraphicsView *view); diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp index 7b42255043f..3ea519b79e2 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp @@ -112,12 +112,15 @@ DesignTools::ValueType typeFrom(const QmlTimelineKeyframeGroup &group) if (group.valueType() == TypeName("double") || group.valueType() == TypeName("real")) return DesignTools::ValueType::Double; - if (group.valueType() == TypeName("bool")) + if (group.valueType() == TypeName("boolean") || group.valueType() == TypeName("bool")) return DesignTools::ValueType::Bool; - if (group.valueType() == TypeName("integer")) + if (group.valueType() == TypeName("integer") || group.valueType() == TypeName("int")) return DesignTools::ValueType::Integer; + // Ignoring types: + // QColor / HAlignment / VAlignment + return DesignTools::ValueType::Undefined; } diff --git a/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon.png b/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon.png new file mode 100644 index 00000000000..196b730ad43 Binary files /dev/null and b/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon.png differ diff --git a/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon@2x.png b/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon@2x.png new file mode 100644 index 00000000000..f24e8f83764 Binary files /dev/null and b/src/plugins/qmldesigner/components/timelineeditor/images/curveGraphIcon@2x.png differ diff --git a/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline.png b/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline.png index 0589f982a7b..bb5e3e846e2 100644 Binary files a/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline.png and b/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline.png differ diff --git a/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline@2x.png b/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline@2x.png index 9eed9ce3c35..838a46a7a67 100644 Binary files a/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline@2x.png and b/src/plugins/qmldesigner/components/timelineeditor/images/remove_timeline@2x.png differ diff --git a/src/plugins/qmldesigner/components/timelineeditor/timeline.qrc b/src/plugins/qmldesigner/components/timelineeditor/timeline.qrc index b793c1f8dac..158b982e85f 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timeline.qrc +++ b/src/plugins/qmldesigner/components/timelineeditor/timeline.qrc @@ -73,5 +73,7 @@ images/timeline-16px.png images/remove_timeline.png images/remove_timeline@2x.png + images/curveGraphIcon.png + images/curveGraphIcon@2x.png diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineicons.h b/src/plugins/qmldesigner/components/timelineeditor/timelineicons.h index 641d4e77b67..c03adde2cd4 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineicons.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineicons.h @@ -83,6 +83,8 @@ const Utils::Icon REMOVE_TIMELINE({ // Icons on the toolbars const Utils::Icon ANIMATION({ {":/timelineplugin/images/animation.png", Utils::Theme::IconsBaseColor}}); +const Utils::Icon CURVE_EDITORDIALOG({ + {":/timelineplugin/images/curveGraphIcon.png", Utils::Theme::IconsBaseColor}}); const Utils::Icon TO_FIRST_FRAME({ {":/timelineplugin/images/to_first_frame.png", Utils::Theme::IconsBaseColor}}); const Utils::Icon BACK_ONE_FRAME({ diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp index 2b3560795d1..7a085700bb1 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp @@ -251,7 +251,7 @@ void TimelineToolBar::createLeftControls() addActionToGroup(settingsAction); auto *curveEditorAction = createAction(TimelineConstants::C_CURVE_EDITOR, - TimelineIcons::ANIMATION.icon(), + TimelineIcons::CURVE_EDITORDIALOG.icon(), tr("Curve Editor"), QKeySequence(Qt::Key_C)); diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index 169ac5f2f00..a7ab5d0491d 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -39,6 +39,8 @@ #include #include +#include + #include #include #include @@ -372,7 +374,7 @@ void TimelineWidget::openEasingCurveEditor() QList frames; for (auto *item : graphicsScene()->selectedKeyframes()) frames.append(item->frameNode()); - EasingCurveDialog::runDialog(frames); + EasingCurveDialog::runDialog(frames, Core::ICore::dialogParent()); } } diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs index 30e9273ef2c..24f77ddedd4 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.qbs +++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs @@ -694,6 +694,10 @@ Project { "texttool/textedititemwidget.h", "texttool/texttool.cpp", "texttool/texttool.h", + "timelineeditor/animationcurvedialog.cpp", + "timelineeditor/animationcurvedialog.h", + "timelineeditor/animationcurveeditormodel.cpp", + "timelineeditor/animationcurveeditormodel.h", "timelineeditor/canvas.cpp", "timelineeditor/canvas.h", "timelineeditor/canvasstyledialog.cpp", diff --git a/src/plugins/studiowelcome/studiowelcomeplugin.cpp b/src/plugins/studiowelcome/studiowelcomeplugin.cpp index b5dc7468986..82bb082c0a5 100644 --- a/src/plugins/studiowelcome/studiowelcomeplugin.cpp +++ b/src/plugins/studiowelcome/studiowelcomeplugin.cpp @@ -249,10 +249,7 @@ void StudioWelcomePlugin::extensionsInitialized() s_view->show(); s_view->raise(); - QTimer::singleShot(15000, [](){ - if (s_view) - s_view->close(); - }); + QTimer::singleShot(15000, [this](){ closeSplashScreen(); }); }); } } diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index 4ec3202b0be..5c9ede15867 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -38,6 +38,7 @@ endif() add_subdirectory(qml2puppet) # add_subdirectory(qtcdebugger) ## windows only # add_subdirectory(qtcrashhandler) +add_subdirectory(qtc-askpass) add_subdirectory(qtcreatorcrashhandler) # add_subdirectory(qtcreatorwidgets) ## qbs does not build this either add_subdirectory(qtpromaker) diff --git a/src/tools/qtc-askpass/CMakeLists.txt b/src/tools/qtc-askpass/CMakeLists.txt new file mode 100644 index 00000000000..3d0bfb3c1b9 --- /dev/null +++ b/src/tools/qtc-askpass/CMakeLists.txt @@ -0,0 +1,5 @@ +add_qtc_executable(qtc-askpass + DEPENDS Qt5::Widgets + SOURCES + qtc-askpass-main.cpp +)