Commit 469edcdd authored by Eike Ziller's avatar Eike Ziller

Merge remote-tracking branch 'origin/4.5'

 Conflicts:
	qbs/modules/qtc/qtc.qbs
	qtcreator.pri

Change-Id: Ic1ab71d0d40fa6c90e337c8ee9d9558e8f103eaa
parents aa7995ba 32377a9a
[submodule "qbs"]
path = src/shared/qbs
url = ../../qt-labs/qbs.git
url = ../../qbs/qbs.git
ignore = dirty
<?xml version="1.0"?>
<Installer>
<Name>Qt Creator</Name>
<Version>{version}</Version>
<Title>Qt Creator {display_version}</Title>
<Publisher>Qt Project</Publisher>
<ProductUrl>http://www.qt.io</ProductUrl>
<InstallerWindowIcon>logo.png</InstallerWindowIcon>
<Watermark>watermark.png</Watermark>
<WizardDefaultHeight>520</WizardDefaultHeight>
<MaintenanceToolName>QtCreatorUninstaller</MaintenanceToolName>
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
<TargetDir>@homeDir@/qtcreator-{display_version}</TargetDir>
<AdminTargetDir>/opt/qtcreator-{display_version}</AdminTargetDir>
</Installer>
<?xml version="1.0"?>
<Installer>
<Name>Qt Creator</Name>
<Version>{version}</Version>
<Title>Qt Creator {display_version}</Title>
<Publisher>Qt Project</Publisher>
<ProductUrl>http://www.qt.io</ProductUrl>
<InstallerWindowIcon>logo.png</InstallerWindowIcon>
<Background>background.png</Background>
<WizardDefaultHeight>560</WizardDefaultHeight>
<MaintenanceToolName>Uninstall Qt Creator</MaintenanceToolName>
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
<TargetDir>@homeDir@/Applications/Qt Creator {display_version}</TargetDir>
<AllowSpaceInPath>true</AllowSpaceInPath>
</Installer>
<?xml version="1.0"?>
<Installer>
<Name>Qt Creator</Name>
<Version>{version}</Version>
<Title>Qt Creator {display_version}</Title>
<Publisher>Qt Project</Publisher>
<ProductUrl>http://www.qt.io</ProductUrl>
<InstallerWindowIcon>logo.png</InstallerWindowIcon>
<Watermark>watermark.png</Watermark>
<WizardDefaultHeight>560</WizardDefaultHeight>
<MaintenanceToolName>QtCreatorUninst</MaintenanceToolName>
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
<TargetDir>@rootDir@/Qt/qtcreator-{display_version}</TargetDir>
<StartMenuDir>Qt Creator</StartMenuDir>
</Installer>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AssociateCommonFiletypesForm</class>
<widget class="QWidget"
name="AssociateCommonFiletypesForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>557</width>
<height>35</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout"
name="verticalLayout">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint"
stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox"
name="AssociateCommonFiletypesCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;body&gt;Associate common file types (.c/.h, .cc/.hh, .cxx/.hxx, .c++/.h++, .cpp/.hpp) with Qt Creator.&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Associate common file types with Qt Creator.</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>LaunchQtCreatorCheckBoxForm</class>
<widget class="QWidget" name="LaunchQtCreatorCheckBoxForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>112</width>
<height>17</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="launchQtCreatorCheckBox">
<property name="text">
<string>Launch Qt Creator</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0"?>
<Package>
<DisplayName>Qt Creator Application</DisplayName>
<Description>The IDE of choice for Qt development.</Description>
<Version>{version}</Version>
<ReleaseDate>{date}</ReleaseDate>
<Name>org.qtproject.qtcreator.application</Name>
<Script>installscript.qs</Script>
<Licenses>
<License name="GNU GPL version 3 (with exception clauses)" file="LICENSE.GPL3-EXCEPT" />
</Licenses>
<ForcedInstallation>true</ForcedInstallation>
<Default>true</Default>
<AutoDependOn>org.qtproject.qtcreator</AutoDependOn>
<UserInterfaces>
<UserInterface>associatecommonfiletypesform.ui</UserInterface>
<UserInterface>launchqtcreatorcheckboxform.ui</UserInterface>
</UserInterfaces>
</Package>
<?xml version="1.0"?>
<Package>
<DisplayName>Qt Creator</DisplayName>
<Description>Installs the Qt Creator IDE.</Description>
<Version>{version}</Version>
<ReleaseDate>{date}</ReleaseDate>
<Name>org.qtproject.qtcreator</Name>
<!-- <Script>installscript.js</Script> -->
</Package>
......@@ -20,11 +20,6 @@ DISTFILES += dist/copyright_template.txt \
$$files(dist/changes-*) \
qtcreator.qbs \
qbs/pluginjson/pluginjson.qbs \
$$files(dist/installer/ifw/config/config-*) \
dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in \
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs \
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in \
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt \
$$files(scripts/*.py) \
$$files(scripts/*.sh) \
$$files(scripts/*.pl)
......@@ -102,9 +97,6 @@ else: PLATFORM = "unknown"
BASENAME = $$(INSTALL_BASENAME)
isEmpty(BASENAME): BASENAME = qt-creator-$${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
macx:INSTALLER_NAME = "qt-creator-$${QTCREATOR_VERSION}"
else:INSTALLER_NAME = "$${BASENAME}"
linux {
appstream.files = dist/org.qt-project.qtcreator.appdata.xml
appstream.path = $$QTC_PREFIX/share/metainfo/
......@@ -150,20 +142,11 @@ isEmpty(INSTALLER_ARCHIVE_FROM_ENV) {
bindist.commands = 7z a -mx9 $$OUT_PWD/$${BASENAME}.7z \"$$BINDIST_SOURCE\"
#bindist_installer.depends = deployqt
bindist_installer.commands = 7z a -mx9 $${INSTALLER_ARCHIVE} \"$$BINDIST_INSTALLER_SOURCE\"
installer.depends = bindist_installer
installer.commands = python -u $$PWD/scripts/packageIfw.py -i \"$(IFW_PATH)\" -v $${QTCREATOR_VERSION} -a \"$${INSTALLER_ARCHIVE}\" "$$INSTALLER_NAME"
macx {
codesign_installer.commands = codesign -s \"$(SIGNING_IDENTITY)\" $(SIGNING_FLAGS) \"$${INSTALLER_NAME}.app\"
dmg_installer.commands = hdiutil create -srcfolder "$${INSTALLER_NAME}.app" -volname \"Qt Creator\" -format UDBZ "$${BASENAME}-installer.dmg" -ov -scrub -size 1g -verbose
QMAKE_EXTRA_TARGETS += codesign_installer dmg_installer
}
win32 {
deployqt.commands ~= s,/,\\\\,g
bindist.commands ~= s,/,\\\\,g
bindist_installer.commands ~= s,/,\\\\,g
installer.commands ~= s,/,\\\\,g
}
QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer installer
QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer
#!/usr/bin/env python
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# 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 General Public License Usage
# Alternatively, this file may be used under the terms of the GNU
# General Public License version 3 as published by the Free Software
# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
# included in the packaging of this file. Please review the following
# information to ensure the GNU General Public License requirements will
# be met: https://www.gnu.org/licenses/gpl-3.0.html.
#
############################################################################
import os
import sys
import datetime
import getopt
import subprocess
import fnmatch
import tempfile
import shutil
import inspect
def usage():
print('Usage: %s [-v|--version-string=versionstring] [-d|--display-version=versionstring] [-i|--installer-path=/path/to/installerfw] [-a|--archive=archive.7z] [--debug] <outputname>' % os.path.basename(sys.argv[0]))
def substitute_file(infile, outfile, substitutions):
with open(infile, 'r') as f:
template = f.read()
with open(outfile, 'w') as f:
f.write(template.format(**substitutions))
def ifw_template_dir():
script_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
source_dir = os.path.normpath(os.path.join(script_dir, '..'))
return os.path.normpath(os.path.join(source_dir, 'dist', 'installer', 'ifw'))
def main():
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], 'hv:d:i:a:', ['help', 'version-string=', 'display-version=', 'installer-path=', 'archive', 'debug'])
except:
usage()
sys.exit(2)
if len(args) < 1:
usage()
sys.exit(2)
version = ''
display_version = ''
ifw_location = ''
archives = []
debug = False
for o, a in opts:
if o in ['-h', '--help']:
usage()
sys.exit(0)
if o in ['-v', '--version-string']:
version = a
if o in ['-d', '--display-version']:
display_version = a
if o in ['-i', '--installer-path']:
ifw_location = a
if o in ['-a', '--archive']:
archives.append(a)
if o in ['--debug']:
debug = True
if (version == ''):
raise Exception('Version not specified (--version-string)!')
if not display_version:
display_version = version
if (ifw_location == ''):
raise Exception('Installer framework location not specified (--installer-path)!')
if not archives:
raise ValueError('No archive(s) specified (--archive)!')
installer_name = args[0]
config_postfix = ''
if sys.platform == 'darwin':
config_postfix = '-mac'
if sys.platform.startswith('win'):
config_postfix = '-windows'
if sys.platform.startswith('linux'):
config_postfix = '-linux'
installer_name = installer_name + '.run'
config_name = 'config' + config_postfix + '.xml'
try:
temp_dir = tempfile.mkdtemp()
except:
raise IOError('Failed to create a temporary directory!')
if debug:
print('Working directory: {0}'.format(temp_dir))
try:
substs = {}
substs['version'] = version
substs['display_version'] = display_version
substs['date'] = datetime.date.today().isoformat()
substs['archives'] = ','.join(archives)
template_dir = ifw_template_dir()
out_config_dir = os.path.join(temp_dir,'config')
out_packages_dir = os.path.join(temp_dir, 'packages')
shutil.copytree(os.path.join(template_dir, 'packages'), os.path.join(temp_dir, 'packages'))
shutil.copytree(os.path.join(template_dir, 'config'), os.path.join(temp_dir, 'config'))
for root, dirnames, filenames in os.walk(out_packages_dir):
for template in fnmatch.filter(filenames, '*.in'):
substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
os.remove(os.path.join(root, template))
for root, dirnames, filenames in os.walk(out_config_dir):
for template in fnmatch.filter(filenames, '*.in'):
substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
os.remove(os.path.join(root, template))
data_path = os.path.join(out_packages_dir, 'org.qtproject.qtcreator.application', 'data')
if not os.path.exists(data_path):
os.makedirs(data_path)
for archive in archives:
shutil.copy(archive, data_path)
ifw_call = [os.path.join(ifw_location, 'bin', 'binarycreator'), '-c', os.path.join(out_config_dir, config_name), '-p', out_packages_dir, installer_name, '--offline-only' ]
if debug:
ifw_call.append('-v')
subprocess.check_call(ifw_call, stderr=subprocess.STDOUT)
finally:
if not debug:
print('Cleaning up...')
shutil.rmtree(temp_dir)
print('Done.')
if __name__ == '__main__':
main()
......@@ -2,18 +2,20 @@
%{JS: QtSupport.qtIncludes([], ["QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])}
int main(int argc, char *argv[])
{
@if %{SetQPAPhysicalSize}
qputenv("QT_QPA_EGLFS_PHYSICAL_WIDTH", QByteArray("213"));
qputenv("QT_QPA_EGLFS_PHYSICAL_HEIGHT", QByteArray("120"));
@endif
@if %{UseVirtualKeyboard}
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
@endif
#if defined(Q_OS_WIN)
@if %{SetQPAPhysicalSize}
if (qEnvironmentVariableIsEmpty("QTGLESSTREAM_DISPLAY")) {
qputenv("QT_QPA_EGLFS_PHYSICAL_WIDTH", QByteArray("213"));
qputenv("QT_QPA_EGLFS_PHYSICAL_HEIGHT", QByteArray("120"));
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
}
@else
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
@endif
QGuiApplication app(argc, argv);
......
......@@ -756,7 +756,11 @@ void GdbEngine::interruptInferior()
showMessage("TRYING TO INTERRUPT INFERIOR");
if (HostOsInfo::isWindowsHost() && !m_isQnxGdb) {
QTC_ASSERT(state() == InferiorStopRequested, qDebug() << state(); notifyInferiorStopFailed());
DeviceProcessSignalOperation::Ptr signalOperation = runTool()->device()->signalOperation();
IDevice::ConstPtr device = runTool()->device();
if (!device)
device = runParameters().inferior.device;
QTC_ASSERT(device, notifyInferiorStopFailed(); return);
DeviceProcessSignalOperation::Ptr signalOperation = device->signalOperation();
QTC_ASSERT(signalOperation, notifyInferiorStopFailed(); return);
connect(signalOperation.data(), &DeviceProcessSignalOperation::finished,
this, [this, signalOperation](const QString &error) {
......
......@@ -30,6 +30,7 @@
#include "target.h"
#include <utils/asconst.h>
#include <utils/qtcassert.h>
namespace ProjectExplorer {
namespace Internal {
......@@ -37,42 +38,42 @@ namespace Internal {
Subscription::Subscription(const Subscription::Connector &s, const QObject *receiver, QObject *parent) :
QObject(parent), m_subscriber(s)
{
if (receiver != parent)
connect(receiver, &QObject::destroyed, this, &QObject::deleteLater);
if (receiver != parent) {
connect(receiver, &QObject::destroyed, this, [this]() {
unsubscribeAll();
m_subscriber = Connector(); // Reset subscriber
deleteLater();
});
}
}
Subscription::~Subscription()
{
for (const auto &c : Utils::asConst(m_connections))
disconnect(c);
unsubscribeAll();
}
void Subscription::subscribe(ProjectConfiguration *pc)
{
if (!m_subscriber)
return;
QMetaObject::Connection conn = m_subscriber(pc);
if (conn)
m_connections.insert(pc, conn);
connectTo(pc);
if (auto p = qobject_cast<Project *>(pc)) {
for (Target *t : p->targets()) {
for (ProjectConfiguration *pc : t->projectConfigurations())
m_subscriber(pc);
connectTo(pc);
}
} else if (auto t = qobject_cast<Target *>(pc)) {
for (ProjectConfiguration *pc : t->projectConfigurations())
m_subscriber(pc);
connectTo(pc);
}
}
void Subscription::unsubscribe(ProjectConfiguration *pc)
{
auto c = m_connections.value(pc);
if (c) {
disconnect(c);
m_connections.remove(pc);
}
disconnectFrom(pc);
if (auto p = qobject_cast<Project *>(pc)) {
for (Target *t : p->targets()) {
for (ProjectConfiguration *pc : t->projectConfigurations())
......@@ -82,7 +83,32 @@ void Subscription::unsubscribe(ProjectConfiguration *pc)
for (ProjectConfiguration *pc : t->projectConfigurations())
unsubscribe(pc);
}
}
void Subscription::unsubscribeAll()
{
for (const auto &c : Utils::asConst(m_connections))
disconnect(c);
m_connections.clear();
}
void Subscription::connectTo(ProjectConfiguration *pc)
{
QTC_ASSERT(!m_connections.contains(pc), return);
QMetaObject::Connection conn = m_subscriber(pc);
if (conn)
m_connections.insert(pc, conn);
}
void Subscription::disconnectFrom(ProjectConfiguration *pc)
{
auto c = m_connections.value(pc);
if (!c)
return;
disconnect(c);
m_connections.remove(pc);
}
ProjectSubscription::ProjectSubscription(const Subscription::Connector &s, const QObject *r,
......
......@@ -53,6 +53,10 @@ protected:
void subscribe(ProjectConfiguration *pc);
void unsubscribe(ProjectConfiguration *pc);
void unsubscribeAll();
void connectTo(ProjectConfiguration *pc);
void disconnectFrom(ProjectConfiguration *pc);
Connector m_subscriber;
QHash<ProjectConfiguration *, QMetaObject::Connection> m_connections;
};
......
......@@ -668,7 +668,8 @@ QtSupport::ProFileReader *QmakeProject::createProFileReader(const QmakeProFile *
} else {
// Set up a better default environment without using a build configuration:
QmakeBuildConfiguration::setupBuildEnvironment(k, env);
k->addToEnvironment(env);
if (k)
k->addToEnvironment(env);
}
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(k);
......
......@@ -338,6 +338,9 @@ void FormEditorItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *,
if (isInStackedContainer)
showPlaceHolder = qmlItemNode().instanceIsRenderPixmapNull() && isContentVisible();
painter->setClipRegion(m_boundingRect.toRect());
painter->setClipping(true);
if (!hideCompletely) {
if (showPlaceHolder) {
if (scene()->showBoundingRects() && m_boundingRect.width() > 15 && m_boundingRect.height() > 15)
......
......@@ -51,7 +51,7 @@ namespace QmlDesigner {
FormEditorScene::FormEditorScene(FormEditorWidget *view, FormEditorView *editorView)
: QGraphicsScene(),
m_editorView(editorView),
m_showBoundingRects(true)
m_showBoundingRects(false)
{
setupScene();
view->setScene(this);
......
......@@ -107,7 +107,7 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
m_showBoundingRectAction->setShortcut(Qt::Key_A);
m_showBoundingRectAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
m_showBoundingRectAction->setCheckable(true);
m_showBoundingRectAction->setChecked(true);
m_showBoundingRectAction->setChecked(false);
m_showBoundingRectAction->setIcon(Utils::Icons::BOUNDING_RECT.icon());
addAction(m_showBoundingRectAction.data());
......
......@@ -38,6 +38,10 @@ WinRtPackageDeploymentStepWidget::WinRtPackageDeploymentStepWidget(WinRtPackageD
m_ui->setupUi(this);
m_ui->leArguments->setText(m_step->winDeployQtArguments());
m_ui->btnRestoreDefaultArgs->setIcon(Utils::Icons::RESET.icon());
connect(m_ui->btnRestoreDefaultArgs, &QToolButton::pressed,
this, &WinRtPackageDeploymentStepWidget::restoreDefaultArguments);
connect(m_ui->leArguments, &QLineEdit::textChanged,
m_step, &WinRtPackageDeploymentStep::setWinDeployQtArguments);
}
WinRtPackageDeploymentStepWidget::~WinRtPackageDeploymentStepWidget()
......@@ -55,15 +59,10 @@ QString WinRtPackageDeploymentStepWidget::displayName() const
return m_step->displayName();
}
void WinRtPackageDeploymentStepWidget::on_btnRestoreDefaultArgs_clicked()
void WinRtPackageDeploymentStepWidget::restoreDefaultArguments()
{
m_ui->leArguments->setText(m_step->defaultWinDeployQtArguments());
}
void WinRtPackageDeploymentStepWidget::on_leArguments_textChanged(QString str)
{
m_step->setWinDeployQtArguments(str);
}
} // namespace Internal
} // namespace WinRt
......@@ -45,8 +45,7 @@ public:
virtual QString displayName() const;
private:
void on_btnRestoreDefaultArgs_clicked();
void on_leArguments_textChanged(QString str);
void restoreDefaultArguments();
Ui::WinRtPackageDeploymentStepWidget *m_ui;
WinRtPackageDeploymentStep *m_step;
......
......@@ -78,6 +78,10 @@ appversion.output = $$OUT_PWD/app/app_version.h
QMAKE_SUBSTITUTES += appversion
INCLUDEPATH += $$OUT_PWD
macx:DEFINES += "DATA_PATH=\"\\\".\\\"\""
else:win32:DEFINES += "DATA_PATH=\"\\\"../share/qtcreator\\\"\""
else:DEFINES += "DATA_PATH=\"\\\"../../share/qtcreator\\\"\""
isEmpty(SDKTOOL_DATA_PATH) {
macos:DEFINES += $$shell_quote(DATA_PATH=\".\")
else:win32:DEFINES += $$shell_quote(DATA_PATH=\"../share/qtcreator\")
else:DEFINES += $$shell_quote(DATA_PATH=\"../../share/qtcreator\")
} else {
DEFINES += $$shell_quote(DATA_PATH=\"$$SDKTOOL_DATA_PATH\")
}
......@@ -73,7 +73,7 @@ def setKeyboardShortcutForAboutQtC():
clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Keyboard")
filter = waitForObject("{container={title='Keyboard Shortcuts' type='QGroupBox' unnamed='1' "
"visible='1'} type='Utils::FancyLineEdit' unnamed='1' visible='1' "
"placeHolderText='Filter'}")
"placeholderText='Filter'}")
replaceEditorContent(filter, "about")
treewidget = waitForObject("{type='QTreeWidget' unnamed='1' visible='1'}")
modelIndex = waitForObject("{column='0' text='AboutQtCreator' type='QModelIndex' "
......@@ -84,7 +84,7 @@ def setKeyboardShortcutForAboutQtC():
record = waitForObject("{container=%s type='Core::Internal::ShortcutButton' unnamed='1' "
"visible='1' text~='(Stop Recording|Record)'}" % shortcutGB)
shortcut = ("{container=%s type='Utils::FancyLineEdit' unnamed='1' visible='1' "
"placeHolderText='Enter key sequence as text'}" % shortcutGB)
"placeholderText='Enter key sequence as text'}" % shortcutGB)
clickButton(record)
nativeType("<Ctrl+Alt+a>")
clickButton(record)
......
......@@ -12588,13 +12588,6 @@
"diff.qbs:3" "3"
"Differ autotest" "3"
"differ.qbs:3" "4"
"standard pch file (gui)" "4"
"QtcProduct.qbs:58" "5"
"qtcreator_gui_pch.h" "6"
"standard pch file (non-gui)" "4"
"QtcProduct.qbs:50" "5"
"qtcreator_pch.h" "6"
"tst_differ.cpp" "4"
"Environment autotest" "2"
"environment.qbs:3" "3"
"standard pch file (gui)" "3"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment