Merge "Merge remote-tracking branch 'origin/4.5'"

This commit is contained in:
Eike Ziller
2017-11-21 13:11:05 +00:00
committed by The Qt Project
26 changed files with 201 additions and 42 deletions

60
dist/changes-4.5.0.md vendored
View File

@@ -14,10 +14,13 @@ General
* Changed `File System` pane to tree view with top level directory selectable
from `Computer`, `Home`, `Projects`, and individual project root directories
(QTCREATORBUG-8305)
* Fixed crash when closing Qt Creator while searching for updates
(QTCREATORBUG-19165)
Editing
* Added shortcut for sorting selected lines
* Added `Edit` > `Advanced` > `Sort Selected Lines`, replacing `Tools` >
`External` > `Text` > `Sort Selection`
All Projects
@@ -25,12 +28,27 @@ All Projects
* Added support for changing the maximum number of lines shown in compile output
(QTCREATORBUG-2200)
QMake Projects
* Fixed support of wildcards in `INSTALLS` variable (QTCREATORBUG-17935)
* Fixed that `QMAKE_CFLAGS` was not passed to code model
CMake Projects
* Added groups to CMake configuration UI
* Added option to change configuration variable types
* Added option to unset configuration variable
* Improved handling of CMake configuration changes on disk (QTCREATORBUG-17555)
* Improved simplified project tree (QTCREATORBUG-19040)
* Fixed that value was removed when renaming configuration variable
(QTCREATORBUG-17926)
* Fixed that `PATH` environment was unnecessarily modified (QTCREATORBUG-18714)
* Fixed that QML errors in application output where not linked to the source
(QTCREATORBUG-18586)
Qbs Projects
* Fixed that custom `installRoot` was not saved (QTCREATORBUG-18895)
C++ Support
@@ -39,6 +57,7 @@ C++ Support
* Fixed detection of macros defined by tool chain for `C`
* Fixed that `Refactoring` context menu blocked UI while checking for available
actions
* Fixed crash when refactoring class with errors (QTCREATORBUG-19180)
* Clang Code Model
* Added sanity check to `Clang Code Model Warnings` option
(QTCREATORBUG-18864)
@@ -52,6 +71,7 @@ C++ Support
QML Support
* Added wizards with different starting UI layouts
* Fixed that undo history was lost when reformatting file (QTCREATORBUG-18645)
Python Support
@@ -65,6 +85,11 @@ Debugging
* LLDB / macOS
* Added pretty printing of Core Foundation and Foundation string-like types
(QTCREATORBUG-18638)
* CDB
* Fixed attaching to running process with command line arguments
(QTCREATORBUG-19034)
* QML
* Fixed changing values of ECMAScript strings (QTCREATORBUG-19032)
QML Profiler
@@ -73,11 +98,25 @@ QML Profiler
Qt Quick Designer
* Added option to only show visible items in navigator
* Fixed crash in integrated code editor (QTCREATORBUG-19079)
* Fixed crash when Ctrl-clicking on newly refactored QML file
(QTCREATORBUG-19064)
* Fixed filtering in Library view (QTCREATORBUG-19054)
* Fixed `Cmd + Left` in integrated code editor on macOS (QTCREATORBUG-19272)
* Fixed crash with `Become Last Sibling` and multiline expressions
(QTCREATORBUG-19284)
Version Control Systems
* Added query for saving modified files before opening commit editor
(QTCREATORBUG-3857)
* Git
* Fixed issues with localized tool output (QTCREATORBUG-19017)
Test Integration
* Fixed issue with finding test target with CMake projects (QTCREATORBUG-17882,
QTCREATORBUG-18922, QTCREATORBUG-18932)
Beautifier
@@ -98,6 +137,7 @@ Platform Specific
Windows
* Fixed detection of Visual Studio Build Tools 2017 (QTCREATORBUG-19053)
* Fixed that environment variable keys were converted to upper case in build
and run configurations (QTCREATORBUG-18915)
@@ -111,8 +151,16 @@ Android
* Removed support for local deployment (QTBUG-62995)
* Removed support for Ant
* Added UI for managing Android SDKs (QTCREATORBUG-18978)
* Improved Android settings
* Improved checks for minimum requirements of Android tools (QTCREATORBUG-18837)
iOS
* Fixed check for minimum Xcode version (QTCREATORBUG-18091)
* Fixed switching between simulator device types with Xcode 9
(QTCREATORBUG-19270)
Universal Windows Platform
* Fixed deployment on Windows 10 Phone emulator
@@ -122,19 +170,24 @@ Alessandro Portale
Alexander Volkov
Andre Hartmann
André Pönitz
Benjamin Terrier
Christian Kandeler
Christian Stenger
Claus Steuer
Daniel Trevitz
David Schulz
Donald Carr
Eike Ziller
Filipe Azevedo
Friedemann Kleint
Ivan Donchevskii
Jake Petroules
Jaroslaw Kobus
Jochen Becher
Kai Köhne
Knud Dollereder
Laurent Montel
Leena Miettinen
Marco Benelli
Marco Bubke
Mitch Curtis
@@ -145,10 +198,13 @@ Orgad Shaneh
Robert Löhning
Ryuji Kakemizu
Samuel Gaist
scootergrisen
Sergey Belyashov
Serhii Moroz
Thiago Macieira
Thomas Hartmann
Tim Jenssen
Tobias Hunger
Ulf Hermann
Vikas Pachdha
Vikas Pachdha
Viktor Kireev

View File

@@ -260,6 +260,7 @@ public:
BuildToolsMarker = 0x080,
SdkToolsMarker = 0x100,
PlatformToolsMarker = 0x200,
EmulatorToolsMarker = 0x400,
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
};
@@ -278,6 +279,7 @@ private:
BuildTools *parseBuildToolsPackage(const QStringList &data) const;
SdkTools *parseSdkToolsPackage(const QStringList &data) const;
PlatformTools *parsePlatformToolsPackage(const QStringList &data) const;
EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const;
MarkerTag parseMarkers(const QString &line);
MarkerTag m_currentSection = MarkerTag::None;
@@ -292,7 +294,8 @@ const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"},
{SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"},
{SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"},
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"},
{SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"}
};
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
@@ -543,6 +546,10 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage);
break;
case MarkerTag::EmulatorToolsMarker:
createPackage(&SdkManagerOutputParser::parseEmulatorToolsPackage);
break;
case MarkerTag::PlatformMarker:
createPackage(&SdkManagerOutputParser::parsePlatform);
break;
@@ -705,6 +712,22 @@ PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringLi
return platformTools;
}
EmulatorTools *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const
{
EmulatorTools *emulatorTools = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 1, "Emulator-tools")) {
emulatorTools = new EmulatorTools(packageData.revision, data.at(0));
emulatorTools->setDescriptionText(packageData.description);
emulatorTools->setDisplayText(packageData.description);
emulatorTools->setInstalledLocation(packageData.installedLocation);
} else {
qCDebug(sdkManagerLog) << "Emulator-tools: Parsing failed. Minimum required data "
"unavailable:" << data;
}
return emulatorTools;
}
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
{
if (line.isEmpty())

View File

@@ -253,4 +253,20 @@ AndroidSdkPackage::PackageType PlatformTools::type() const
return AndroidSdkPackage::PlatformToolsPackage;
}
EmulatorTools::EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool EmulatorTools::isValid() const
{
return installedLocation().exists();
}
AndroidSdkPackage::PackageType EmulatorTools::type() const
{
return AndroidSdkPackage::EmulatorToolsPackage;
}
} // namespace Android

View File

@@ -52,8 +52,9 @@ public:
PlatformToolsPackage = 1 << 3,
SdkPlatformPackage = 1 << 4,
SystemImagePackage = 1 << 5,
EmulatorToolsPackage = 1 << 6,
AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage |
SdkPlatformPackage | SystemImagePackage
SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage
};
enum PackageState {
@@ -169,6 +170,17 @@ public:
PackageType type() const override;
};
class EmulatorTools : public AndroidSdkPackage
{
public:
EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
class SdkTools : public AndroidSdkPackage
{
public:

View File

@@ -148,8 +148,8 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc,
}
}
if (lookupItems.size()) {
if (CPlusPlus::Symbol *symbol = lookupItems.first().declaration()) {
for (const CPlusPlus::LookupItem &item : lookupItems) {
if (CPlusPlus::Symbol *symbol = item.declaration()) {
if (CPlusPlus::Class *toeClass = symbol->asClass()) {
const QString declFileName = QLatin1String(toeClass->fileId()->chars(),
toeClass->fileId()->size());

View File

@@ -123,8 +123,12 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const
switch (type()) {
case TestCase: {
QStringList testFunctions;
for (int row = 0, count = childCount(); row < count; ++row)
testFunctions << name() + "::" + childItem(row)->name();
for (int row = 0, count = childCount(); row < count; ++row) {
const TestTreeItem *child = childItem(row);
if (child->type() == TestTreeItem::TestSpecialFunction)
continue;
testFunctions << name() + "::" + child->name();
}
config = new QuickTestConfiguration;
config->setTestCases(testFunctions);
config->setProjectFile(proFile());

View File

@@ -101,7 +101,7 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) :
connect(m_model->parser(), &TestCodeParser::parsingFailed,
this, &TestNavigationWidget::onParsingFinished);
connect(m_model, &TestTreeModel::updatedActiveFrameworks,
[this] (int numberOfActive) {
this, [this] (int numberOfActive) {
m_missingFrameworksWidget->setVisible(numberOfActive == 0);
});
connect(m_progressTimer, &QTimer::timeout,

View File

@@ -95,6 +95,12 @@ public:
addWrappedQtHeadersIncludePath();
}
void addToolchainAndProjectMacros() final
{
addMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")});
CompilerOptionsBuilder::addToolchainAndProjectMacros();
}
void addExtraOptions() final
{
addDummyUiHeaderOnDiskIncludePath();

View File

@@ -88,8 +88,9 @@ public:
REPARSE_URGENT = 1, // Do not wait for more requests, start ASAP
REPARSE_FORCE_CONFIGURATION = 2, // Force configuration arguments to cmake
REPARSE_CHECK_CONFIGURATION = 4, // Check and warn if on-disk config and QtC config differ
REPARSE_IGNORE = 8, // Do not reparse:-)
REPARSE_FAIL = 16 // Do not reparse and raise a warning
REPARSE_SCAN = 8,
REPARSE_IGNORE = 16, // Do not reparse:-)
REPARSE_FAIL = 32 // Do not reparse and raise a warning
};
signals:

View File

@@ -390,25 +390,27 @@ bool CMakeProject::supportsKit(Kit *k, QString *errorMessage) const
void CMakeProject::runCMake()
{
if (isParsing())
CMakeBuildConfiguration *bc = activeBc(this);
if (isParsing() || !bc)
return;
CMakeBuildConfiguration *bc = activeBc(this);
if (bc) {
BuildDirParameters parameters(bc);
m_buildDirManager.setParametersAndRequestParse(parameters,
BuildDirManager::REPARSE_CHECK_CONFIGURATION,
BuildDirManager::REPARSE_CHECK_CONFIGURATION);
}
BuildDirParameters parameters(bc);
m_buildDirManager.setParametersAndRequestParse(parameters,
BuildDirManager::REPARSE_CHECK_CONFIGURATION,
BuildDirManager::REPARSE_CHECK_CONFIGURATION);
}
void CMakeProject::runCMakeAndScanProjectTree()
{
if (!m_treeScanner.isFinished())
CMakeBuildConfiguration *bc = activeBc(this);
if (isParsing() || !bc)
return;
QTC_ASSERT(m_treeScanner.isFinished(), return);
m_waitingForScan = true;
runCMake();
BuildDirParameters parameters(bc);
m_buildDirManager.setParametersAndRequestParse(parameters,
BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN,
BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN);
}
void CMakeProject::buildCMakeTarget(const QString &buildTarget)
@@ -452,6 +454,8 @@ void CMakeProject::handleReparseRequest(int reparseParameters)
m_delayedParsingTimer.setInterval((reparseParameters & BuildDirManager::REPARSE_URGENT) ? 0 : 1000);
m_delayedParsingTimer.start();
m_delayedParsingParameters = m_delayedParsingParameters | reparseParameters;
if (m_allFiles.isEmpty())
m_delayedParsingParameters |= BuildDirManager::REPARSE_SCAN;
}
void CMakeProject::startParsing(int reparseParameters)
@@ -466,6 +470,7 @@ void CMakeProject::startParsing(int reparseParameters)
emitParsingStarted();
m_waitingForScan = reparseParameters & BuildDirManager::REPARSE_SCAN;
m_waitingForParse = true;
m_combinedScanAndParseResult = true;

View File

@@ -58,6 +58,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
addToolchainAndProjectMacros();
undefineClangVersionMacrosForMsvc();
undefineCppLanguageFeatureMacrosForMsvc2015();
addDefineFunctionMacrosMsvc();
addPredefinedHeaderPathsOptions();
addPrecompiledHeaderOptions(pchUsage);
@@ -389,6 +390,12 @@ void CompilerOptionsBuilder::undefineCppLanguageFeatureMacrosForMsvc2015()
}
}
void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc()
{
if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
addMacros({{"__FUNCSIG__", "\"\""}, {"__FUNCTION__", "\"\""}, {"__FUNCDNAME__", "\"\""}});
}
QString CompilerOptionsBuilder::includeDirOption() const
{
return QLatin1String("-I");

View File

@@ -64,11 +64,12 @@ public:
void addWordWidth();
void addHeaderPathOptions();
void addPrecompiledHeaderOptions(PchUsage pchUsage);
void addToolchainAndProjectMacros();
virtual void addToolchainAndProjectMacros();
void addMacros(const ProjectExplorer::Macros &macros);
void addMsvcCompatibilityVersion();
void undefineCppLanguageFeatureMacrosForMsvc2015();
void addDefineFunctionMacrosMsvc();
void addProjectConfigFileInclude();
void undefineClangVersionMacrosForMsvc();

View File

@@ -2102,7 +2102,7 @@ void DebuggerPlugin::attachExternalApplication(RunControl *rc)
ProcessHandle pid = rc->applicationProcessHandle();
RunConfiguration *runConfig = rc->runConfiguration();
auto runControl = new RunControl(runConfig, ProjectExplorer::Constants::DEBUG_RUN_MODE);
auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()}));
auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()}), false);
debugger->setAttachPid(pid);
debugger->setRunControlName(tr("Process %1").arg(pid.pid()));
debugger->setStartMode(AttachExternal);

View File

@@ -795,7 +795,7 @@ Internal::TerminalRunner *DebuggerRunTool::terminalRunner() const
return d->terminalRunner;
}
DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit)
DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTerminal)
: RunWorker(runControl), d(new DebuggerRunToolPrivate)
{
setDisplayName("DebuggerRunTool");
@@ -839,7 +839,7 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit)
// Normalize to work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch'...)
m_runParameters.inferior.workingDirectory =
FileUtils::normalizePathName(m_runParameters.inferior.workingDirectory);
setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console);
setUseTerminal(allowTerminal && m_runParameters.inferior.runMode == ApplicationLauncher::Console);
}
const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH");

View File

@@ -47,7 +47,8 @@ class DEBUGGER_EXPORT DebuggerRunTool : public ProjectExplorer::RunWorker
public:
explicit DebuggerRunTool(ProjectExplorer::RunControl *runControl,
ProjectExplorer::Kit *kit = nullptr);
ProjectExplorer::Kit *kit = nullptr,
bool allowTerminal = true);
~DebuggerRunTool();
Internal::DebuggerEngine *engine() const { return m_engine; }

View File

@@ -87,6 +87,7 @@ public:
void bringToForeground();
qint64 applicationPID() const;
bool isRunning() const;
bool isRemoteRunning() const;
// Remote
void doReportError(const QString &message);
@@ -220,6 +221,11 @@ bool ApplicationLauncher::isRunning() const
return d->isRunning();
}
bool ApplicationLauncher::isRemoteRunning() const
{
return d->isRemoteRunning();
}
bool ApplicationLauncherPrivate::isRunning() const
{
if (m_currentMode == ApplicationLauncher::Gui)
@@ -227,6 +233,11 @@ bool ApplicationLauncherPrivate::isRunning() const
return m_consoleProcess.isRunning();
}
bool ApplicationLauncherPrivate::isRemoteRunning() const
{
return m_isLocal ? false : m_deviceProcess->state() == QProcess::Running;
}
ProcessHandle ApplicationLauncher::applicationPID() const
{
return ProcessHandle(d->applicationPID());

View File

@@ -61,6 +61,7 @@ public:
void stop();
bool isRunning() const;
Utils::ProcessHandle applicationPID() const;
bool isRemoteRunning() const;
QString errorString() const;
QProcess::ProcessError processError() const;

View File

@@ -275,7 +275,7 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths,
}
if (notAdded->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
rebuildProjectTree();
delayedUpdateAfterParse();
}
return notAdded->isEmpty();
}
@@ -302,8 +302,7 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
}
if (notRemoved->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
rebuildProjectTree();
emit fileListChanged();
delayedUpdateAfterParse();
}
return notRemoved->isEmpty();
}
@@ -472,6 +471,11 @@ void QbsProject::updateAfterParse()
emit fileListChanged();
}
void QbsProject::delayedUpdateAfterParse()
{
QTimer::singleShot(0, this, &QbsProject::updateAfterParse);
}
void QbsProject::updateProjectNodes()
{
OpTimer opTimer("updateProjectNodes");

View File

@@ -136,6 +136,7 @@ private:
void handleRuleExecutionDone();
bool checkCancelStatus();
void updateAfterParse();
void delayedUpdateAfterParse();
void updateProjectNodes();
void projectLoaded() override;

View File

@@ -63,7 +63,7 @@ const char QBS_INSTALLSTEP_ID[] = "Qbs.InstallStep";
const char QBS_VARIANT_DEBUG[] = "debug";
const char QBS_VARIANT_RELEASE[] = "release";
const char QBS_CONFIG_VARIANT_KEY[] = "qbs.buildVariant";
const char QBS_CONFIG_VARIANT_KEY[] = "qbs.defaultBuildVariant";
const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile";
const char QBS_INSTALL_ROOT_KEY[] = "qbs.installRoot";
const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "Qt.declarative.qmlDebugging";

View File

@@ -55,6 +55,7 @@
#include <QSet>
#include <QDir>
#include <QLoggingCategory>
#include <QRegularExpression>
using namespace LanguageUtils;
using namespace QmlJS;
@@ -330,6 +331,19 @@ static inline QString extractComponentFromQml(const QString &source)
return result;
}
static QString normalizeJavaScriptExpression(const QString &expression)
{
static const QRegularExpression regExp("\\n(\\s)+");
QString result = expression;
return result.replace(regExp, "\n");
}
static bool compareJavaScriptExpression(const QString &expression1, const QString &expression2)
{
return normalizeJavaScriptExpression(expression1) == normalizeJavaScriptExpression(expression2);
}
} // anonymous namespace
namespace QmlDesigner {
@@ -1379,7 +1393,7 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
{
if (modelProperty.isBindingProperty()) {
BindingProperty bindingProperty = modelProperty.toBindingProperty();
if (bindingProperty.expression() != javascript
if (!compareJavaScriptExpression(bindingProperty.expression(), javascript)
|| astType.isEmpty() == bindingProperty.isDynamic()
|| astType != bindingProperty.dynamicTypeName()) {
differenceHandler.bindingExpressionsDiffer(bindingProperty, javascript, astType);
@@ -1574,7 +1588,7 @@ void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty,
Q_UNUSED(modelProperty)
Q_UNUSED(javascript)
Q_UNUSED(astType)
Q_ASSERT(modelProperty.expression() == javascript);
Q_ASSERT(compareJavaScriptExpression(modelProperty.expression(), javascript));
Q_ASSERT(modelProperty.dynamicTypeName() == astType);
Q_ASSERT(0);
}

View File

@@ -298,7 +298,9 @@ void Parser::Private::parseHeader(QIODevice *device)
// now that we're done checking if we're done (heh) with the header, parse the address
// and cost column descriptions. speed is unimportant here.
if (line.startsWith("positions: ")) {
if (line.startsWith('#')) {
continue;
} else if (line.startsWith("positions: ")) {
QString values = getValue(line, 11);
data->setPositions(values.split(QLatin1Char(' '), QString::SkipEmptyParts));
addressValuesCount = data->positions().count();

View File

@@ -62,8 +62,6 @@ ValgrindConfigWidget::ValgrindConfigWidget(ValgrindBaseSettings *settings,
connect(m_ui->valgrindExeChooser, &Utils::PathChooser::rawPathChanged,
m_settings, &ValgrindBaseSettings::setValgrindExecutable);
connect(m_settings, &ValgrindBaseSettings::valgrindExecutableChanged,
m_ui->valgrindExeChooser, &Utils::PathChooser::setPath);
connect(m_ui->smcDetectionComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
m_settings, &ValgrindBaseSettings::setSelfModifyingCodeDetection);

View File

@@ -143,10 +143,7 @@ void ValgrindBaseSettings::toMap(QVariantMap &map) const
void ValgrindBaseSettings::setValgrindExecutable(const QString &valgrindExecutable)
{
if (m_valgrindExecutable != valgrindExecutable) {
m_valgrindExecutable = valgrindExecutable;
emit valgrindExecutableChanged(valgrindExecutable);
}
m_valgrindExecutable = valgrindExecutable;
}
void ValgrindBaseSettings::setSelfModifyingCodeDetection(int smcDetection)

View File

@@ -78,7 +78,6 @@ public:
void setSelfModifyingCodeDetection(int);
signals:
void valgrindExecutableChanged(const QString &);
void selfModifyingCodeDetectionChanged(int);
private: