diff --git a/doc/images/qtcreator-gs-build-example-open.png b/doc/images/qtcreator-gs-build-example-open.png
index 6f73b1a9beb..3f34fd3807b 100644
Binary files a/doc/images/qtcreator-gs-build-example-open.png and b/doc/images/qtcreator-gs-build-example-open.png differ
diff --git a/doc/src/analyze/qtquick-profiler.qdoc b/doc/src/analyze/qtquick-profiler.qdoc
index a99f9e285e3..e917afc9668 100644
--- a/doc/src/analyze/qtquick-profiler.qdoc
+++ b/doc/src/analyze/qtquick-profiler.qdoc
@@ -30,6 +30,38 @@
\title Profiling QML Applications
+ You can use the QML Profiler to find causes for typical performance problems
+ in your applications, such as slowness and unresponsive, stuttering user
+ interfaces. Typical causes include executing too much JavaScript in too few
+ frames. All JavaScript must return before the GUI thread can proceed, and
+ frames are delayed or dropped if the GUI thread is not ready.
+
+ Another typical cause for similar performance problems is creating,
+ painting, or updating invisible items, which takes time in the GUI thread.
+
+ Triggering long-running C++ functions, such as paint methods and signal
+ handlers, also takes time in the GUI thread, but is more difficult to see in
+ the QML Profiler, because it does not profile C++ code.
+
+ To find excessive use of JavaScript, check the frame rate in animations and
+ Scene Graph events, look for gaps, and check whether the application behaves
+ as expected. The JavaScript category displays the run time of functions,
+ which you should try to keep below 16 ms per frame.
+
+ To find problems caused by handling invisible items, look for dropped
+ frames and check that you are not using too many short bindings or signal
+ handlers that are updated per frame. You can also \l{Visualizing Overdraw}
+ {visualize Scene Graph overdraw} to check scene layout and find items that
+ are never visible to the users, because they are located outside the screen
+ or hidden beneath other, visible elements.
+
+ If frames get dropped even though JavaScript is not being run, and there are
+ large, unexplained gaps in the timeline, check your custom QQuickItem
+ implementations. You can use \l{Using Valgrind Code Analysis Tools}
+ {Valgrind} or other general purpose profilers to analyze C++ code.
+
+ \section1 Using QML Profiler
+
To monitor the performance of an application in the QML Profiler:
\list 1
diff --git a/doc/src/projects/creator-projects-build-run-tutorial.qdoc b/doc/src/projects/creator-projects-build-run-tutorial.qdoc
index e3bf65d9740..d3811a44747 100644
--- a/doc/src/projects/creator-projects-build-run-tutorial.qdoc
+++ b/doc/src/projects/creator-projects-build-run-tutorial.qdoc
@@ -45,14 +45,9 @@
\li Select an example in the list of examples.
- You can also search for examples (2). Enter the \uicontrol android or
- \uicontrol iOS keyword in the search field to list all the examples tested
- for Android or iOS.
-
- \note The project opens in the \uicontrol Edit mode, and the documentation
- for the example hides these instructions. To return to these
- instructions, select \uicontrol {Previous Page} on the toolbar or
- press \key {Alt+Left}.
+ You can also search for examples. Enter the \uicontrol android or
+ \uicontrol iOS keyword in the search field (2) to list all the
+ examples tested for Android or iOS.
\li To check that the application code can be compiled and linked for a
device, click the \uicontrol {Kit Selector} and select a
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index c51385ea10e..506e86712e1 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -963,20 +963,6 @@ class DumperBase:
return False
- def tryPutArrayContents(self, base, n, innerType):
- enc = self.simpleEncoding(innerType)
- if not enc:
- return False
- size = n * innerType.sizeof;
- self.put('childtype="%s",' % innerType)
- self.put('addrbase="0x%x",' % toInteger(base))
- self.put('addrstep="0x%x",' % toInteger(innerType.sizeof))
- self.put('arrayencoding="%s",' % enc)
- self.put('arraydata="')
- self.put(self.readMemory(base, size))
- self.put('",')
- return True
-
def putSimpleCharArray(self, base, size = None):
if size is None:
elided, shown, data = self.readToFirstZero(base, 1, self.displayStringLimit)
@@ -1057,10 +1043,18 @@ class DumperBase:
innerType = value.type.target().unqualified()
innerTypeName = str(innerType)
+ goodPointer = False
try:
target = value.dereference()
- target.is_optimized_out # Access test.
+ str(target) # Dummy access.
+ if self.isLldb and target.GetError().Fail():
+ pass
+ else:
+ goodPointer = True
except:
+ pass
+
+ if not goodPointer:
# Failure to dereference a pointer should at least
# show the value of a pointer.
self.putValue(self.cleanAddress(value))
@@ -1128,7 +1122,6 @@ class DumperBase:
self.currentChildType = self.stripClassTag(innerTypeName)
self.putItem(value.dereference())
self.currentChildType = savedCurrentChildType
- #self.putPointerValue(value)
self.putOriginalAddress(value)
return
@@ -1473,17 +1466,24 @@ class DumperBase:
displayFormat = self.typeformats.get(needle, AutomaticFormat)
return displayFormat
- def putArrayData(self, base, n, innerType = None,
+ def putArrayData(self, base, n, innerType,
childNumChild = None, maxNumChild = 10000):
- if innerType is None:
- innerType = base.dereference().type
- if not self.tryPutArrayContents(base, n, innerType):
- base = self.createPointerValue(base, innerType)
+ addrBase = toInteger(base)
+ innerSize = innerType.sizeof
+ enc = self.simpleEncoding(innerType)
+ if enc:
+ self.put('childtype="%s",' % innerType)
+ self.put('addrbase="0x%x",' % addrBase)
+ self.put('addrstep="0x%x",' % innerSize)
+ self.put('arrayencoding="%s",' % enc)
+ self.put('arraydata="')
+ self.put(self.readMemory(addrBase, n * innerSize))
+ self.put('",')
+ else:
with Children(self, n, innerType, childNumChild, maxNumChild,
- base, innerType.sizeof):
+ addrBase=addrBase, addrStep=innerSize):
for i in self.childRange():
- i = toInteger(i)
- self.putSubItem(i, (base + i).dereference())
+ self.putSubItem(i, self.createValue(addrBase + i * innerSize, innerType))
def putArrayItem(self, name, addr, n, typeName):
with SubItem(self, name):
@@ -1792,6 +1792,11 @@ class DumperBase:
return True
return functionName.startswith(self.qtNamespace() + "QV4::")
+ # Hack to avoid QDate* dumper timeouts with GDB 7.4 on 32 bit
+ # due to misaligned %ebx in SSE calls (qstring.cpp:findChar)
+ def canCallLocale(self):
+ return True
+
def isReportableQmlFrame(self, functionName):
return functionName and functionName.find("QV4::Moth::VME::exec") >= 0
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index 06ec7954479..7eae19cbc28 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -346,6 +346,11 @@ class Dumper(DumperBase):
return items
+ # Hack to avoid QDate* dumper timeouts with GDB 7.4 on 32 bit
+ # due to misaligned %ebx in SSE calls (qstring.cpp:findChar)
+ # This seems to be fixed in 7.9 (or earlier)
+ def canCallLocale(self):
+ return False if self.is32bit() else True
def showData(self, args):
self.prepare(args)
@@ -726,9 +731,15 @@ class Dumper(DumperBase):
def extractInt64(self, addr):
return struct.unpack("q", self.readRawMemory(addr, 8))[0]
+ def extractUInt64(self, addr):
+ return struct.unpack("Q", self.readRawMemory(addr, 8))[0]
+
def extractInt(self, addr):
return struct.unpack("i", self.readRawMemory(addr, 4))[0]
+ def extractUInt(self, addr):
+ return struct.unpack("I", self.readRawMemory(addr, 4))[0]
+
def extractByte(self, addr):
return struct.unpack("b", self.readRawMemory(addr, 1))[0]
@@ -1054,7 +1065,7 @@ class Dumper(DumperBase):
if typeobj.code != StructCode and typeobj.code != UnionCode:
warn("WRONG ASSUMPTION HERE: %s " % typeobj.code)
- check(False)
+ self.check(False)
if tryDynamic:
@@ -1647,8 +1658,8 @@ class CliDumper(Dumper):
self.indent = 0
self.isCli = True
- def reportDumpers(self):
- return ""
+ def reportDumpers(self, msg):
+ return msg
def enterSubItem(self, item):
if not item.iname:
@@ -1728,20 +1739,11 @@ class CliDumper(Dumper):
return True
def showData(self, args):
- arglist = args.split(' ')
- name = ''
- if len(arglist) >= 1:
- name = arglist[0]
- allexpanded = [name]
- if len(arglist) >= 2:
- for sub in arglist[1].split(','):
- allexpanded.append(name + '.' + sub)
- pars = {}
- pars['fancy': 1]
- pars['passException': 1]
- pars['autoderef': 1]
- pars['expanded': allexpanded]
- self.prepare(pars)
+ args['fancy'] = 1
+ args['passException'] = 1
+ args['autoderef'] = 1
+ name = args['varlist']
+ self.prepare(args)
self.output = name + ' = '
frame = gdb.selected_frame()
value = frame.read_var(name)
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 500c0477a8d..21066a53838 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -125,7 +125,10 @@ def impl_SBValue__getitem__(value, index):
address = address & 0xFFFFFFFFFFFFFFFF # Force unsigned
return value.CreateValueFromAddress(None, address, innertype)
return value.GetChildAtIndex(index)
- return value.GetChildMemberWithName(index)
+ item = value.GetChildMemberWithName(index)
+ if item.IsValid():
+ return item
+ raise RuntimeError("SBValue.__getitem__: No such member '%s'" % index)
def impl_SBValue__deref(value):
result = value.Dereference()
@@ -508,14 +511,26 @@ class Dumper(DumperBase):
def addressOf(self, value):
return int(value.GetLoadAddress())
- def extractInt(self, address):
+ def extractUInt(self, address):
error = lldb.SBError()
return int(self.process.ReadUnsignedFromMemory(address, 4, error))
- def extractInt64(self, address):
+ def extractInt(self, address):
+ i = self.extractUInt(address)
+ if i >= 0x80000000:
+ i -= 0x100000000
+ return i
+
+ def extractUInt64(self, address):
error = lldb.SBError()
return int(self.process.ReadUnsignedFromMemory(address, 8, error))
+ def extractInt64(self, address):
+ i = self.extractUInt64(address)
+ if i >= 0x8000000000000000:
+ i -= 0x10000000000000000
+ return i
+
def extractByte(self, address):
error = lldb.SBError()
return int(self.process.ReadUnsignedFromMemory(address, 1, error) & 0xFF)
@@ -579,11 +594,17 @@ class Dumper(DumperBase):
def createPointerValue(self, address, pointeeType):
addr = int(address) & 0xFFFFFFFFFFFFFFFF
- return self.context.CreateValueFromAddress(None, addr, pointeeType).AddressOf()
+ sbaddr = lldb.SBAddress(addr, self.target)
+ # Any type.
+ # FIXME: This can be replaced with self.target.CreateValueFromExpression
+ # as soon as we drop support for lldb builds not having that (~Xcode 6.1)
+ dummy = self.target.CreateValueFromAddress('@', sbaddr, self.target.FindFirstType('char'))
+ return dummy.CreateValueFromExpression('', '(%s*)%s' % (pointeeType, addr))
def createValue(self, address, referencedType):
addr = int(address) & 0xFFFFFFFFFFFFFFFF
- return self.context.CreateValueFromAddress(None, addr, referencedType)
+ sbaddr = lldb.SBAddress(addr, self.target)
+ return self.target.CreateValueFromAddress('@', sbaddr, referencedType)
def childRange(self):
if self.currentMaxNumChild is None:
@@ -1064,6 +1085,20 @@ class Dumper(DumperBase):
self.putFormattedPointer(value)
return
+ # Chars
+ if typeClass == lldb.eTypeClassBuiltin:
+ basicType = value.GetType().GetBasicType()
+ if basicType == lldb.eBasicTypeChar:
+ self.putValue(value.GetValueAsUnsigned())
+ self.putType(typeName)
+ self.putNumChild(0)
+ return
+ if basicType == lldb.eBasicTypeSignedChar:
+ self.putValue(value.GetValueAsSigned())
+ self.putType(typeName)
+ self.putNumChild(0)
+ return
+
#warn("VALUE: %s" % value)
#warn("FANCY: %s" % self.useFancy)
if self.tryPutPrettyItem(typeName, value):
@@ -1730,6 +1765,9 @@ class Tester(Dumper):
s.start()
s.join(30)
+ def reportDumpers(self, msg):
+ pass
+
def testLoop(self):
# Disable intermediate reporting.
savedReport = self.report
@@ -1751,53 +1789,37 @@ class Tester(Dumper):
state = self.process.GetState()
if listener.WaitForEvent(100, event):
#warn("EVENT: %s" % event)
- out = lldb.SBStream()
- event.GetDescription(out)
- msg = lldb.SBEvent.GetCStringFromEvent(event)
- flavor = event.GetDataFlavor()
- state = lldb.SBProcess.GetStateFromEvent(event)
- #warn('event={type="%s",data="%s",msg="%s",flavor="%s",state="%s"}'
- # % (event.GetType(), out.GetData(), msg, flavor, state))
state = lldb.SBProcess.GetStateFromEvent(event)
if state == lldb.eStateExited: # 10
break
if state == lldb.eStateStopped: # 5
- stoppedThread = self.firstStoppedThread()
- if stoppedThread is None:
- warn("NO STOPPED THREAD FOUND")
- continue
+ stoppedThread = None
+ for i in xrange(0, self.process.GetNumThreads()):
+ thread = self.process.GetThreadAtIndex(i)
+ reason = thread.GetStopReason()
+ #warn("THREAD: %s REASON: %s" % (thread, reason))
+ if (reason == lldb.eStopReasonBreakpoint or
+ reason == lldb.eStopReasonException or
+ reason == lldb.eStopReasonSignal):
+ stoppedThread = thread
- #for i in xrange(0, self.process.GetNumThreads()):
- # thread = self.process.GetThreadAtIndex(i)
- # reason = thread.GetStopReason()
- # warn("THREAD: %s REASON: %s" % (thread, reason))
-
- try:
+ if stoppedThread:
+ # This seems highly fragile and depending on the "No-ops" in the
+ # event handling above.
frame = stoppedThread.GetFrameAtIndex(0)
- break
- except:
- warn("NO FRAME FOUND FOR THREAD %s" % stoppedThread)
+ line = frame.line_entry.line
+ if line != 0:
+ self.report = savedReport
+ self.process.SetSelectedThread(stoppedThread)
+ self.reportVariables()
+ #self.reportLocation(frame)
+ self.report("@NS@%s@" % self.qtNamespace())
+ #self.report("ENV=%s" % os.environ.items())
+ #self.report("DUMPER=%s" % self.qqDumpers)
+ break
+
else:
warn('TIMEOUT')
+ warn("Cannot determined stopped thread")
-
- stoppedThread = self.firstStoppedThread()
- if not stoppedThread:
- warn("Cannot determined stopped thread")
- return
-
- # This seems highly fragile and depending on the "No-ops" in the
- # event handling above.
- self.process.SetSelectedThread(stoppedThread)
-
- frame = stoppedThread.GetFrameAtIndex(0)
- #file = fileName(frame.line_entry.file)
- #line = frame.line_entry.line
- #warn('LOCATION={file="%s",line="%s",addr="%s"}'
- # % (file, line, frame.pc))
- self.report = savedReport
- self.reportVariables()
- self.report("@NS@%s@" % self.qtNamespace())
- #self.report("ENV=%s" % os.environ.items())
- #self.report("DUMPER=%s" % self.qqDumpers)
lldb.SBDebugger.Destroy(self.debugger)
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 031c72bf48f..9078b3b7542 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -198,14 +198,15 @@ def qdump__QDate(d, value):
if d.isExpanded():
# FIXME: This improperly uses complex return values.
with Children(d):
- d.putCallItem("toString", value, "toString",
- d.enumExpression("DateFormat", "TextDate"))
- d.putCallItem("(ISO)", value, "toString",
- d.enumExpression("DateFormat", "ISODate"))
- d.putCallItem("(SystemLocale)", value, "toString",
- d.enumExpression("DateFormat", "SystemLocaleDate"))
- d.putCallItem("(Locale)", value, "toString",
- d.enumExpression("DateFormat", "LocaleDate"))
+ if d.canCallLocale():
+ d.putCallItem("toString", value, "toString",
+ d.enumExpression("DateFormat", "TextDate"))
+ d.putCallItem("(ISO)", value, "toString",
+ d.enumExpression("DateFormat", "ISODate"))
+ d.putCallItem("(SystemLocale)", value, "toString",
+ d.enumExpression("DateFormat", "SystemLocaleDate"))
+ d.putCallItem("(Locale)", value, "toString",
+ d.enumExpression("DateFormat", "LocaleDate"))
d.putFields(value)
else:
d.putValue("(invalid)")
@@ -224,10 +225,11 @@ def qdump__QTime(d, value):
d.enumExpression("DateFormat", "TextDate"))
d.putCallItem("(ISO)", value, "toString",
d.enumExpression("DateFormat", "ISODate"))
- d.putCallItem("(SystemLocale)", value, "toString",
- d.enumExpression("DateFormat", "SystemLocaleDate"))
- d.putCallItem("(Locale)", value, "toString",
- d.enumExpression("DateFormat", "LocaleDate"))
+ if d.canCallLocale():
+ d.putCallItem("(SystemLocale)", value, "toString",
+ d.enumExpression("DateFormat", "SystemLocaleDate"))
+ d.putCallItem("(Locale)", value, "toString",
+ d.enumExpression("DateFormat", "LocaleDate"))
d.putFields(value)
else:
d.putValue("(invalid)")
@@ -305,18 +307,19 @@ def qdump__QDateTime(d, value):
# FIXME: This improperly uses complex return values.
with Children(d):
d.putCallItem("toTime_t", value, "toTime_t")
- d.putCallItem("toString", value, "toString",
- d.enumExpression("DateFormat", "TextDate"))
- d.putCallItem("(ISO)", value, "toString",
- d.enumExpression("DateFormat", "ISODate"))
- d.putCallItem("(SystemLocale)", value, "toString",
- d.enumExpression("DateFormat", "SystemLocaleDate"))
- d.putCallItem("(Locale)", value, "toString",
- d.enumExpression("DateFormat", "LocaleDate"))
- d.putCallItem("toUTC", value, "toTimeSpec",
- d.enumExpression("TimeSpec", "UTC"))
- d.putCallItem("toLocalTime", value, "toTimeSpec",
- d.enumExpression("TimeSpec", "LocalTime"))
+ if d.canCallLocale():
+ d.putCallItem("toString", value, "toString",
+ d.enumExpression("DateFormat", "TextDate"))
+ d.putCallItem("(ISO)", value, "toString",
+ d.enumExpression("DateFormat", "ISODate"))
+ d.putCallItem("toUTC", value, "toTimeSpec",
+ d.enumExpression("TimeSpec", "UTC"))
+ d.putCallItem("(SystemLocale)", value, "toString",
+ d.enumExpression("DateFormat", "SystemLocaleDate"))
+ d.putCallItem("(Locale)", value, "toString",
+ d.enumExpression("DateFormat", "LocaleDate"))
+ d.putCallItem("toLocalTime", value, "toTimeSpec",
+ d.enumExpression("TimeSpec", "LocalTime"))
d.putFields(value)
else:
d.putValue("(invalid)")
diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py
index eb34ac41594..d37edc150a2 100644
--- a/share/qtcreator/debugger/stdtypes.py
+++ b/share/qtcreator/debugger/stdtypes.py
@@ -385,8 +385,8 @@ def qdump__std__set__QNX(d, value):
def qdump__std____1__set(d, value):
base3 = d.addressOf(value["__tree_"]["__pair3_"])
- size = d.extractInt(base3)
- d.check(0 <= size and size <= 100*1000*1000)
+ size = d.extractUInt(base3)
+ d.check(size <= 100*1000*1000)
d.putItemCount(size)
d.putNumChild(0)
@@ -442,7 +442,7 @@ def qdump__std____1__string(d, value):
if firstByte & 1:
# Long/external.
data = d.extractPointer(base + 2 * d.ptrSize())
- size = d.extractInt(base + d.ptrSize())
+ size = d.extractUInt(base + d.ptrSize())
else:
# Short/internal.
size = firstByte / 2
@@ -457,7 +457,7 @@ def qdump__std____1__wstring(d, value):
if firstByte & 1:
# Long/external.
data = d.extractPointer(base + 2 * d.ptrSize())
- size = d.extractInt(base + d.ptrSize())
+ size = d.extractUInt(base + d.ptrSize())
else:
# Short/internal.
size = firstByte / 2
@@ -476,7 +476,6 @@ def qdump__std__shared_ptr(d, value):
if d.isSimpleType(d.templateArgument(value.type, 0)):
d.putValue("%s @0x%x" % (d.simpleValue(i.dereference()), d.pointerValue(i)))
else:
- i = d.expensiveDowncast(i)
d.putValue("@0x%x" % d.pointerValue(i))
d.putNumChild(3)
@@ -515,7 +514,6 @@ def qdump__std__unique_ptr(d, value):
if d.isSimpleType(d.templateArgument(value.type, 0)):
d.putValue("%s @0x%x" % (d.simpleValue(i.dereference()), d.pointerValue(i)))
else:
- i = d.expensiveDowncast(i)
d.putValue("@0x%x" % d.pointerValue(i))
d.putNumChild(1)
@@ -554,24 +552,24 @@ def qdump__std__unordered_map(d, value):
ptrSize = d.ptrSize()
try:
# gcc ~= 4.7
- size = value["_M_element_count"]
+ size = int(value["_M_element_count"])
start = value["_M_before_begin"]["_M_nxt"]
offset = 0
except:
try:
# libc++ (Mac)
- size = value["_M_h"]["_M_element_count"]
+ size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"]
offset = 0
except:
try:
# gcc 4.9.1
- size = value["_M_h"]["_M_element_count"]
+ size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_before_begin"]["_M_nxt"]
offset = 0
except:
# gcc 4.6.2
- size = value["_M_element_count"]
+ size = int(value["_M_element_count"])
start = value["_M_buckets"].dereference()
# FIXME: Pointer-aligned?
offset = pairType.sizeof
@@ -579,17 +577,16 @@ def qdump__std__unordered_map(d, value):
# We don't know where the data is
d.putNumChild(0)
return
+
d.putItemCount(size)
if d.isExpanded():
p = d.pointerValue(start)
if d.isMapCompact(keyType, valueType):
- with Children(d, size, childType=valueType):
+ with PairedChildren(d, size, pairType=pairType):
for i in d.childRange():
pair = d.createValue(p + ptrSize, pairType)
with SubItem(d, i):
- d.putField("iname", d.currentIName)
- d.putName("[%s] %s" % (i, pair["first"]))
- d.putValue(pair["second"])
+ d.putPair(pair, i)
p = d.extractPointer(p)
else:
with Children(d, size, childType=pairType):
@@ -603,24 +600,24 @@ def qdump__std____debug__unordered_map(d, value):
def qdump__std__unordered_set(d, value):
try:
# gcc ~= 4.7
- size = value["_M_element_count"]
+ size = int(value["_M_element_count"])
start = value["_M_before_begin"]["_M_nxt"]
offset = 0
except:
try:
# libc++ (Mac)
- size = value["_M_h"]["_M_element_count"]
+ size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"]
offset = 0
except:
try:
# gcc 4.6.2
- size = value["_M_element_count"]
+ size = int(value["_M_element_count"])
start = value["_M_buckets"].dereference()
offset = d.ptrSize()
except:
# gcc 4.9.1
- size = value["_M_h"]["_M_element_count"]
+ size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_before_begin"]["_M_nxt"]
offset = 0
@@ -641,11 +638,18 @@ def qdump__std____1__unordered_map(d, value):
size = int(value["__table_"]["__p2_"]["__first_"])
d.putItemCount(size)
if d.isExpanded():
+ # There seem to be several versions of the implementation.
+ def valueCCorNot(val):
+ try:
+ return val["__cc"]
+ except:
+ return val
+
node = value["__table_"]["__p1_"]["__first_"]["__next_"]
- with PairedChildren(d, size, pairType=node["__value_"].type, maxNumChild=1000):
+ with PairedChildren(d, size, pairType=valueCCorNot(node["__value_"]).type):
for i in d.childRange():
with SubItem(d, i):
- d.putPair(node["__value_"], i)
+ d.putPair(valueCCorNot(node["__value_"]), i)
node = node["__next_"]
diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts
index 9f1ba47265c..b78237a6e1e 100644
--- a/share/qtcreator/translations/qtcreator_ru.ts
+++ b/share/qtcreator/translations/qtcreator_ru.ts
@@ -83,7 +83,31 @@
- Analyzer::AnalyzerManagerPrivate
+ Analyzer::AnalyzerManager
+
+ Debug
+ Отладка
+
+
+ Release
+ Выпуск
+
+
+ Tool
+ Инструмент
+
+
+ Run %1 in %2 Mode?
+ Выполнить %1 в режиме %2?
+
+
+ <html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used in %3 mode.</p><p>Debug and Release mode run-time characteristics differ significantly, analytical findings for one mode may or may not be relevant for the other.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html>
+ <html><head/><body><p>Попытка выполнить утилиту «%1» для приложения в режиме %2. Утилита разработана для использования в режиме %3.</p><p>Работа в режимах отладки и выпуска значительно отличается, поэтому проблемы, найденные для одного из них, могут отсутствовать у другого.</p><p>Выполнить запуск утилиты в режиме %2?</p></body></html>
+
+
+ Analyze
+ Анализ
+
&Analyze
&Анализ
@@ -121,10 +145,10 @@
- Analyzer::Internal::AnalyzerMode
+ Analyzer::DetailedErrorView
- Analyze
- Анализ
+ Copy
+ Копировать
@@ -184,26 +208,6 @@
Log file processed, no issues were found.
Файл журнала обработан, проблем не найдено.
-
- Debug
- Отладка
-
-
- Release
- Выпуск
-
-
- Tool
- Инструмент
-
-
- Run %1 in %2 Mode?
- Выполнить %1 в режиме %2?
-
-
- <html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used in %3 mode.</p><p>Debug and Release mode run-time characteristics differ significantly, analytical findings for one mode may or may not be relevant for the other.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html>
- <html><head/><body><p>Попытка выполнить утилиту «%1» для приложения в режиме %2. Утилита разработана для использования в режиме %3.</p><p>Работа в режимах отладки и выпуска значительно отличается, поэтому проблемы, найденные для одного из них, могут отсутствовать у другого.</p><p>Выполнить запуск утилиты в режиме %2?</p></body></html>
-
AnchorRow
@@ -304,17 +308,6 @@
Сбой запуска виртуального устройства Android.
-
- Android::AndroidPlugin
-
- Android Manifest file
- Файл Android Manifest
-
-
- Could not add mime-type for AndroidManifest.xml editor.
- Не удалось добавить MIME-тип для редактора AndroidManifest.xml.
-
-
Android::Internal::AddNewAVDDialog
@@ -430,6 +423,28 @@
Uninstall previous package %1.
Удаление предыдущего пакета %1.
+
+ Starting: "%1" %2
+ Запускается: «%1» %2
+
+
+ The process "%1" exited normally.
+ Процесс «%1» завершился успешно.
+
+
+ The process "%1" exited with code %2.
+ Процесс «%1» завершился с кодом %2.
+
+
+ The process "%1" crashed.
+ Процесс «%1» завершился крахом.
+
+
+ Another application with the same package id but signed with different certificate already exists.
+Do you want to uninstall the existing package?
+ Приложение с таким же идентификатором пакета, но подписанное другим сертификатом, уже существует.
+Удалить существующий пакет?
+
Package deploy: Running command "%1 %2".
Установка пакета: Выполнение команды «%1 %2».
@@ -438,24 +453,18 @@
Packaging error: Could not start command "%1 %2". Reason: %3
Ошибка создания пакета: Не удалось выполнить команду «%1 %2»: %3
-
- Packaging Error: Command "%1 %2" failed.
- Ошибка создания пакета: Команда «%1 %2» завершилась с ошибкой.
-
Install failed
Ошибка установки
-
- Another application with the same package id but signed with different ceritificate already exists.
-Do you want to uninstall the existing package next time?
- Приложение с таким же идентификатором пакета, но подписанное другим сертификатом, уже существует.
-Удалить существующий пакет в следующий раз?
-
Pulling files necessary for debugging.
Загрузка файлов, необходимых для отладки.
+
+ Packaging error: Command "%1 %2" failed.
+ Ошибка создания пакета: Команда «%1 %2» завершилась с ошибкой.
+
Reason: %1
Причина: %1
@@ -907,6 +916,12 @@ Do you want to uninstall the existing package next time?
"%1" does not seem to be an Android NDK top folder.
Путь «%1» не похож на корневой каталог Android NDK.
+
+ Qt versions for %1 architectures are missing.
+To add the Qt versions, select Options > Build & Run > Qt Versions.
+ Отсутствуют профили Qt для %1 архитектур(ы).
+Для их добавления зайдите в Параметры - Сборка и запуск - Профили Qt.
+
Found %n toolchains for this NDK.
@@ -929,12 +944,6 @@ To add the Qt version, select Options > Build & Run > Qt Versions.The Android NDK cannot be installed into a path with spaces.
Нельзя устанавливать Android NDK в каталог, путь к которому содержит пробелы.
-
- Qt versions for architectures %1 are missing.
-To add the Qt versions, select Options > Build & Run > Qt Versions.
- Отсутствуют профили Qt для архитектур %1.
-Для их добавления зайдите в Параметры - Сборка и запуск - Профили Qt.
-
The Platform tools are missing. Please use the Android SDK Manager to install them.
Отсутствуют инструменты для данной платформы. Используйте Android SDK Manager для их установки.
@@ -956,8 +965,8 @@ To add the Qt versions, select Options > Build & Run > Qt Versions.Неподдерживаемый GDB
- The GDB inside this NDK seems to not support Python. The Qt Project offers fixed GDB builds at: <a href="http://download.qt-project.org/official_releases/gdb/">http://download.qt-project.org/official_releases/gdb/</a>
- Похоже, GDB из NDK не поддерживает Python. Проект Qt предлагает исправленную сборку GDB: <a href="http://download.qt-project.org/official_releases/gdb/">http://download.qt-project.org/official_releases/gdb/</a>
+ The GDB inside this NDK seems to not support Python. The Qt Project offers fixed GDB builds at: <a href="http://download.qt.io/official_releases/gdb/">http://download.qt.io/official_releases/gdb/</a>
+ Похоже, GDB из NDK не поддерживает Python. Проект Qt предлагает исправленную сборку GDB: <a href="http://download.qt.io/official_releases/gdb/">http://download.qt.io/official_releases/gdb/</a>
Select Android SDK folder
@@ -1104,9 +1113,9 @@ The APK will not be usable on any other device.
Signing an APK that uses "Deploy local Qt libraries" is not allowed.
-Deploying local Qt libraries is incompatible with Android 5
+Deploying local Qt libraries is incompatible with Android 5.
Подписывание APK, использующего локальные библиотеки Qt, запрещено.
-Установка локальных библиотек Qt не поддерживается на Android 5
+Установка локальных библиотек Qt не поддерживается на Android 5.
@@ -1327,7 +1336,7 @@ Deploying local Qt libraries is incompatible with Android 5
Не удалось найти модуль Core в %1
- No valid theme '%1'
+ No valid theme "%1"
Подходящая тема «%1» не обнаружена
@@ -1540,20 +1549,64 @@ Deploying local Qt libraries is incompatible with Android 5
BareMetal
- Example:
- Пример:
+ BareMetal
+ BareMetal
- Enter your hostname like "localhost" or "192.0.2.1" or a command which must support GDB pipelining starting with a pipe symbol.
- Введите имя вашего компьютера, например «localhost», «192.0.2.1» или команду с символом перенаправления потоков, которая должна поддерживать запуск GDB с перенаправлением потоков.
+ Enter GDB commands to reset the board, and to write the nonvolatile memory.
+ Введите команды GDB для сброса платы и записи в энергонезависимую память.
- Enter the hardware reset command here.<br>The CPU should be halted after this command.
- Введите здесь команду сброса аппаратуры.<br>После этой команды процессор должен быть остановлен.
+ Enter GDB commands to reset the hardware. The MCU should be halted after this commands.
+ Введите команды GDB для аппаратного сброса. После этих команд процессор должен быть остановлен.
+
+
+
+ BareMetal::GdbServerProvider
+
+ Clone of %1
+ Копия %1
+
+
+
+ BareMetal::Internal::BareMetalCustomRunConfigWidget
+
+ Executable:
+ Программа:
- Enter commands to reset the board, and write the nonvolatile memory.
- Введите команды для сброса платы и записи в энергонезависимую память.
+ Arguments:
+ Параметры:
+
+
+ Work directory:
+ Рабочий каталог:
+
+
+
+ BareMetal::Internal::BareMetalCustomRunConfiguration
+
+ The remote executable must be set in order to run a custom remote run configuration.
+ Для запуска внешнего приложения его необходимо задать.
+
+
+ Custom Executable (on GDB server or hardware debugger)
+ Особое приложение (через сервер GDB или аппаратный отладчик)
+
+
+
+ BareMetal::Internal::BareMetalDebugSupport
+
+ Debugging failed.
+ Ошибка отладки.
+
+
+ Initial setup failed: %1
+ Не удалось выполнить начальную настройку: %1
+
+
+ Starting GDB server...
+ Запускается сервер GDB...
@@ -1573,20 +1626,8 @@ Deploying local Qt libraries is incompatible with Android 5
BareMetal::Internal::BareMetalDeviceConfigurationWidget
- GDB host:
- Хост GDB:
-
-
- GDB port:
- Порт GDB:
-
-
- Init commands:
- Команды инициализации:
-
-
- Reset commands:
- Команды сброса:
+ GDB server provider:
+ Тип сервера GDB:
@@ -1607,25 +1648,13 @@ Deploying local Qt libraries is incompatible with Android 5
Название:
- Init commands:
- Команды инициализации:
-
-
- Reset commands:
- Команды сброса:
+ GDB server provider:
+ Тип сервера GDB:
Bare Metal Device
Голое устройство
-
- GDB port:
- Порт GDB:
-
-
- GDB host:
- Хост GDB:
-
BareMetal::Internal::BareMetalGdbCommandsDeployStep
@@ -1685,10 +1714,243 @@ Deploying local Qt libraries is incompatible with Android 5
BareMetal::Internal::BareMetalRunControlFactory
+
+ Cannot debug: Local executable is not set.
+ Отладка невозможна: локальная программа не задана.
+
+
+ Cannot debug: Could not find executable for "%1".
+ Отладка невозможна: не удалось найти программу для «%1».
+
Cannot debug: Kit has no device.
Отладка невозможна: комплект не имеет устройства.
+
+ Cannot debug: Device has no GDB server provider configuration.
+ Отладка невозможна: у устройства не настроена конфигурация GDB сервера.
+
+
+
+ BareMetal::Internal::DefaultGdbServerProviderConfigWidget
+
+ Host:
+ Хост:
+
+
+ Init commands:
+ Команды инициализации:
+
+
+ Reset commands:
+ Команды сброса:
+
+
+
+ BareMetal::Internal::DefaultGdbServerProviderFactory
+
+ Default
+ По умолчанию
+
+
+
+ BareMetal::Internal::GdbServerProviderChooser
+
+ Manage...
+ Управление...
+
+
+ None
+ Нет
+
+
+
+ BareMetal::Internal::GdbServerProviderConfigWidget
+
+ Enter the name of the GDB server provider.
+ Введите имя сервера GDB.
+
+
+ Name:
+ Имя:
+
+
+ Choose the desired startup mode of the GDB server provider.
+ Выберите желаемый метод запуска сервера GDB.
+
+
+ Startup mode:
+ Режим запуска:
+
+
+ No Startup
+ Не запускать
+
+
+ Startup in TCP/IP Mode
+ Запуск в режиме TCP/IP
+
+
+ Startup in Pipe Mode
+ Запуск в локальном режиме (pipe)
+
+
+
+ BareMetal::Internal::GdbServerProviderModel
+
+ Name
+ Имя
+
+
+ Type
+ Тип
+
+
+ Duplicate Providers Detected
+ Обнаружены дублирующиеся серверы
+
+
+ The following provider was already configured:<br> %1<br>It was not configured again.
+ Следующий сервер уже настроен:<br> %1<br>Повторно настраиваться не будет.
+
+
+ The following providers were already configured:<br> %1<br>They were not configured again.
+ Следующие серверы уже настроены:<br> %1<br>Повторно настраиваться не будут.
+
+
+
+ BareMetal::Internal::GdbServerProvidersSettingsPage
+
+ GDB Server Providers
+ Серверы GDB
+
+
+ Add
+ Добавить
+
+
+ Clone
+ Копировать
+
+
+ Remove
+ Удалить
+
+
+
+ BareMetal::Internal::HostWidget
+
+ Enter TCP/IP hostname of the GDB server provider, like "localhost" or "192.0.2.1".
+ Введите TCP/IP имя сервера GDB, например: «localhost» или «192.0.2.1».
+
+
+ Enter TCP/IP port which will be listened by the GDB server provider.
+ Введите порт TCP/IP, который будет прослушиваться сервером GDB.
+
+
+
+ BareMetal::Internal::OpenOcdGdbServerProviderConfigWidget
+
+ Host:
+ Хост:
+
+
+ Executable file:
+ Исполняемый файл:
+
+
+ Root scripts directory:
+ Корень каталога скриптов:
+
+
+ Configuration file:
+ Файл конфигурации:
+
+
+ Additional arguments:
+ Дополнительные параметры:
+
+
+ Init commands:
+ Команды инициализации:
+
+
+ Reset commands:
+ Команды сброса:
+
+
+
+ BareMetal::Internal::OpenOcdGdbServerProviderFactory
+
+ OpenOCD
+ OpenOCD
+
+
+
+ BareMetal::Internal::StLinkUtilGdbServerProviderConfigWidget
+
+ Host:
+ Хост:
+
+
+ Executable file:
+ Исполняемый файл:
+
+
+ Specify the verbosity level (0..99).
+ Укажите уровень информативности (0...99).
+
+
+ Verbosity level:
+ Уровень информативности:
+
+
+ Continue listening for connections after disconnect.
+ Продолжать ожидание подключений после отключения.
+
+
+ Extended mode:
+ Расширенный режим:
+
+
+ Reset board on connection.
+ Сбросить плату при подключении.
+
+
+ Reset on connection:
+ Сбросить при подключении:
+
+
+ Transport layer type.
+ Тип транспортного уровня.
+
+
+ Version:
+ Версия:
+
+
+ Init commands:
+ Команды инициализации:
+
+
+ Reset commands:
+ Команды сброса:
+
+
+ ST-LINK/V1
+ ST-LINK/V1
+
+
+ ST-LINK/V2
+ ST-LINK/V2
+
+
+
+ BareMetal::Internal::StLinkUtilGdbServerProviderFactory
+
+ ST-LINK Utility
+ Утилита ST-LINK
+
BaseFileWizard
@@ -1755,6 +2017,10 @@ Deploying local Qt libraries is incompatible with Android 5
Requires Qt 5.3.0 or newer.
Требуется Qt версии 5.3.0 или выше.
+
+ This Qt Version does not contain Qt Quick Compiler.
+ Этот профиль Qt не содержит компилятора Qt Quick.
+
Building Debugging Helpers
Сборка помощников отладчика
@@ -1818,12 +2084,12 @@ Local commits are not pushed to the master branch until a normal commit is perfo
Bazaar::Internal::BazaarEditorWidget
- Annotate %1
- Аннотация %1
+ &Annotate %1
+ &Аннотация %1
- Annotate parent revision %1
- Аннотация родительской ревизии %1
+ Annotate &parent revision %1
+ Аннотация &родительской ревизии %1
@@ -2688,6 +2954,10 @@ For example, "Revision: 15" will leave the branch at revision 15.File Error
Ошибка файла
+
+ The file is too big for the Binary Editor (max. 2GB).
+ Файл слишком велик для двоичного редактора (максимум 2ГБ).
+
Cannot open %1: %2
Не удалось открыть %1: %2
@@ -3491,17 +3761,13 @@ This wizard will guide you through the essential steps to deploy a ready-to-go d
CategoryLabel
-
- <bytecode>
- <байтовый код>
-
Collapse category
Категория сворачивания
- Expand category.
- Категория разворачивания.
+ Expand category
+ Категория разворачивания
@@ -4846,14 +5112,6 @@ p, li { white-space: pre-wrap; }
Go Forward
Перейти вперёд
-
- Copy Full Path to Clipboard
- Скопировать полный путь в буфер обмена
-
-
- Copy File Name to Clipboard
- Скопировать имя файла в буфер обмена
-
&Save
&Сохранить
@@ -4882,6 +5140,18 @@ p, li { white-space: pre-wrap; }
File Error
Ошибка файла
+
+ Copy Full Path
+ Скопировать полный путь
+
+
+ Copy Path and Line Number
+ Скопировать путь и номер строки
+
+
+ Copy File Name
+ Скопировать имя файла
+
Open With
Открыть с помощью
@@ -5157,12 +5427,19 @@ p, li { white-space: pre-wrap; }
Текущее время (локаль).
- The current date (QDate formatstring)
- Текущая дата (строка форматирования QDate)
+ The current date (QDate formatstring).
+ Текущая дата (строка форматирования QDate).
- The current time (QTime formatstring)
- Текущее время (строка форматирования QTime)
+ The current time (QTime formatstring).
+ Текущее время (строка форматирования QTime).
+
+
+
+ Core::Internal::CurrentDocumentFind
+
+ %1 occurrences replaced.
+ Произведено %1 замен(а).
@@ -5467,6 +5744,25 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
Отмена
+
+ Core::Internal::EnvironmentChangesDialog
+
+ Edit Environment Changes
+ Изменение среды
+
+
+ Change system environment by assigning one environment variable per line:
+ Изменение среды путём задания переменных. Одна переменная на строке:
+
+
+ PATH=C:\dev\bin;${PATH}
+ PATH=C:\dev\bin;${PATH}
+
+
+ PATH=/opt/bin:${PATH}
+ PATH=/opt/bin:${PATH}
+
+
Core::Internal::ExecuteFilter
@@ -5689,6 +5985,18 @@ Do you want to kill it?
<p>Что делать со стандартным выводом ошибок приложения.
<ul><li>Игнорировать: Не делать ничего.</li><li>Показать в консоли: Показать в основной панели вывода.</li><li>Заменить выделенное: Заменить текущий выделенный текст в документе на этот вывод.</li></ul></p></body></html>
+
+ Environment:
+ Среда:
+
+
+ Change...
+ Изменить...
+
+
+ No changes to apply.
+ Без изменений.
+
Core::Internal::ExternalToolModel
@@ -6062,6 +6370,18 @@ Do you want to kill it?
Type to locate (%1)
Быстрый поиск (%1)
+
+ <html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Open a document</div><table><tr><td><hr/><div style="margin-top: 5px">• File > Open File or Project (%1)</div><div style="margin-top: 5px">• File > Recent Files</div><div style="margin-top: 5px">• Tools > Locate (%2) and</div><div style="margin-left: 1em">- type to open file from any open project</div>%4%5<div style="margin-left: 1em">- type <code>%3<space><filename></code> to open file from file system</div><div style="margin-left: 1em">- select one of the other filters for jumping to a location</div><div style="margin-top: 5px">• Drag and drop files here</div></td></tr></table></div></body></html>
+ <html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Открыть документ</div><table><tr><td><hr/><div style="margin-top: 5px">• Файл > Открыть файл или проект (%1)</div><div style="margin-top: 5px">• Файл > Недавние файлы</div><div style="margin-top: 5px">• Инструменты > Найти (%2) и</div><div style="margin-left: 1em">- введите для открытия файла любого открытого проекта</div>%4%5<div style="margin-left: 1em">- введите <code>%3<space><имяфайла></code> для открытия любого файла с диска</div><div style="margin-left: 1em">- выберите любой другой фильтр для перехода</div><div style="margin-top: 5px">• Перетаскивайте файлы тут</div></td></tr></table></div></body></html>
+
+
+ <div style="margin-left: 1em">- type <code>%1<space><pattern></code> to jump to a class definition</div>
+ <div style="margin-left: 1em">- введите <code>%1<пробел><шаблон></code> для перехода к телу класса</div>
+
+
+ <div style="margin-left: 1em">- type <code>%1<space><pattern></code> to jump to a function definition</div>
+ <div style="margin-left: 1em">- введите <code>%1<пробел><шаблон></code> для перехода к телу функции</div>
+
Updating Locator Caches
Обновление кэшей поиска
@@ -6074,6 +6394,13 @@ Do you want to kill it?
Доступные фильтры
+
+ Core::Internal::LocatorSettingsPage
+
+ %1 (prefix: %2)
+ %1 (префикс: %2)
+
+
Core::Internal::LocatorSettingsWidget
@@ -6113,7 +6440,7 @@ Do you want to kill it?
Locate...
- Обзор...
+ Найти...
Options
@@ -6156,7 +6483,7 @@ Do you want to kill it?
&New File or Project...
- &Новый файл или проект...
+ Соз&дать файл или проект...
&Open File or Project...
@@ -6286,6 +6613,11 @@ Do you want to kill it?
Show Mode Selector
Показать выбор режимов
+
+ New File or Project
+ Title of dialog
+ Новый файл или проект
+
Ctrl+Shift+F11
Ctrl+Shift+F11
@@ -6310,11 +6642,6 @@ Do you want to kill it?
About &Plugins...
О &модулях...
-
- New
- Title of dialog
- Новый
-
Settings...
Настройки...
@@ -6338,8 +6665,8 @@ Do you want to kill it?
Ошибка
- Not a valid byte pattern.
- Неверный шаблон байта.
+ Internal error: Type is invalid
+ Внутренняя ошибка: тип неверен
Dialog
@@ -6349,10 +6676,6 @@ Do you want to kill it?
Value:
Значение:
-
- Type
- Тип
-
String
Строка
@@ -6365,14 +6688,6 @@ Do you want to kill it?
Use Recommended
Использовать рекомендации
-
- Start range:
- Начало диапазона:
-
-
- End range:
- Конец диапазона:
-
Priority:
Приоритет:
@@ -6381,6 +6696,54 @@ Do you want to kill it?
<i>Note: Wide range values might impact Qt Creator's performance when opening files.</i>
<i>Широкий диапазон значений может снизить скорость Qt Creator при открытии файлов.</i>
+
+ <html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html>
+ <html><head/><body><p>Магические данные MIME интерпретируются так, как задано в спецификации Shared MIME-Info Database сайта <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html>
+
+
+ Type:
+ Тип:
+
+
+ Host16
+ Host16
+
+
+ Host32
+ Host32
+
+
+ Big16
+ Big16
+
+
+ Big32
+ Big32
+
+
+ Little16
+ Little16
+
+
+ Little32
+ Little32
+
+
+ Mask:
+ Маска:
+
+
+ Range start:
+ Начало диапазона:
+
+
+ Range end:
+ Конец диапазона:
+
+
+ RegExp
+ RegExp
+
Core::Internal::MimeTypeSettings
@@ -6403,22 +6766,6 @@ Do you want to kill it?
Undefined
Неопределён
-
- Invalid MIME Type
- Неверный тип MIME
-
-
- Conflicting pattern(s) will be discarded.
- Конфликтующие шаблоны будут опущены.
-
-
- %n pattern(s) already in use.
-
- %n шаблон уже используется.
- %n шаблона уже используются.
- %n шаблонов уже используются.
-
-
Core::Internal::MimeTypeSettingsPage
@@ -6478,24 +6825,12 @@ Do you want to kill it?
Core::Internal::MimeTypeSettingsPrivate
- Error
- Ошибка
+ Reset MIME Types
+ Сброс типов MIME
- No MIME type selected.
- Тип MIME не выбран.
-
-
- No magic header selected.
- Заголовок-признак не выбран.
-
-
- MIME Types
- Типы MIME
-
-
- Changes will take effect in the next time you start Qt Creator.
- Изменения вступят в силу при следующем запуске Qt Creator.
+ Changes will take effect after Qt Creator restart.
+ Изменения вступят в силу после перезапуска Qt Creator.
@@ -6832,13 +7167,6 @@ Do you want to kill it?
Параметры
-
- Core::Internal::SettingsPage
-
- %1 (prefix: %2)
- %1 (префикс: %2)
-
-
Core::Internal::ShortcutSettings
@@ -6987,7 +7315,7 @@ Do you want to kill it?
Удаление темы
- Are you sure you want to delete the theme '%1' permanently?
+ Are you sure you want to delete the theme "%1" permanently?
Удалить тему «%1» навсегда?
@@ -7026,28 +7354,6 @@ Do you want to kill it?
Внешние утилиты
-
- Core::Internal::VariableChooserPrivate
-
- Insert variable
- Вставить переменную
-
-
-
- Core::Internal::VariableTreeView
-
- Insert unexpanded value
- Вставить неразворачиваемое значение
-
-
- Insert "%1"
- Вставить «%1»
-
-
- Insert expanded value
- Вставить разворачиваемое значение
-
-
Core::Internal::VersionDialog
@@ -7055,8 +7361,12 @@ Do you want to kill it?
О Qt Creator
- <h3>%1</h3>%2<br/><br/>Built on %3 at %4<br /><br/>%5<br/>Copyright 2008-%6 %7. All rights reserved.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/>
- <h3>%1</h3>%2<br/><br/>Собран %3 в %4<br/><br/>%5<br/>© 2008-%6 %7. Все права защищены.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/>
+ Built on %1 %2<br/>
+ Собрано %1 в %2<br/>
+
+
+ <h3>%1</h3>%2<br/><br/>%3<br/>%4<br/>Copyright 2008-%5 %6. All rights reserved.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/>
+ <h3>%1</h3>%2<br/><br/>%3<br/>%4<br/>© 2008-%5 %6. Все права защищены.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/>
From revision %1<br/>
@@ -7278,6 +7588,22 @@ Do you want to check them out now?
Core::VariableChooser
+
+ Insert variable
+ Вставить переменную
+
+
+ Insert unexpanded value
+ Вставить неразворачиваемое значение
+
+
+ Insert "%1"
+ Вставить «%1»
+
+
+ Insert expanded value
+ Вставить разворачиваемое значение
+
Select a variable to insert.
Выберите переменную для вставки.
@@ -7333,10 +7659,12 @@ to version control (%2)?
Could not add the file
%1
-to version control (%2)
+to version control (%2)
+
Не удалось добавить файл
%1
-под контроль версий (%2)
+под контроль версий (%2)
+
Could not add the following files to version control (%1)
@@ -7382,13 +7710,6 @@ to version control (%2)
Добавить реализацию вне класса
-
- CppEditor::Internal::CppEditorOutline
-
- Sort Alphabetically
- Сортировать по алфавиту
-
-
CppEditor::Internal::CppEditorPlugin
@@ -7635,6 +7956,14 @@ to version control (%2)
Move Definition to %1
Переместить реализацию в %1
+
+ Move All Function Definitions Outside Class
+ Вынести из тела класса реализацию всех методов
+
+
+ Move All Function Definitions to %1
+ Перенести реализацию всех функций в %1
+
Move Definition to Class
Перенести реализацию в класс
@@ -7697,6 +8026,13 @@ to version control (%2)
Классы C++
+
+ CppTools::CppEditorOutline
+
+ Sort Alphabetically
+ Сортировать по алфавиту
+
+
CppTools::CppToolsSettings
@@ -7826,6 +8162,18 @@ to version control (%2)
Automatically split strings
Автоматически разделять строки
+
+ Splits a string into two lines by adding an end quote at the cursor position when you press Enter and a start quote to the next line, before the rest of the string.
+
+In addition, Shift+Enter inserts an escape character at the cursor position and moves the rest of the string to the next line.
+ Если включено, то при нажатии в середине строки клавиши Enter в текущую позицию курсора будет помещена кавычка, остаток текста будет перенесен на следующую строку с установкой кавычки перед ним.
+
+Дополнительно, Shift-Enter вставляет экранирующий символ в позицию курсора и переносит правую часть текста на следующую строку.
+
+
+ Timeout in ms:
+ Время ожидания в мс:
+
CppTools::Internal::CppCodeModelSettingsPage
@@ -8240,6 +8588,13 @@ These prefixes are used in addition to current file name on Switch Header/Source
Функции C++
+
+ CppTools::Internal::CppIncludesFilter
+
+ All Included C/C++ Files
+ Все подключённые файлы С/С++
+
+
CppTools::Internal::CppLocatorFilter
@@ -8723,6 +9078,22 @@ Flags: %3
Commit Project "%1"
Фиксировать проект «%1»
+
+ Update Directory
+ Обновить каталог
+
+
+ Update Directory "%1"
+ Обновить каталог «%1»
+
+
+ Commit Directory
+ Фиксировать каталог
+
+
+ Commit Directory "%1"
+ Фиксировать каталог «%1»
+
Diff Repository
Сравнить всё
@@ -8944,176 +9315,6 @@ Flags: %3
Ctrl+Shift+F11
-
- Debugger::DebuggerEngine
-
- Setup failed.
- Не удалось настроить.
-
-
- Loading finished.
- Загрузка завершена.
-
-
- Run failed.
- Запуск неудачно завершился.
-
-
- Running.
- Выполняется.
-
-
- Run requested...
- Потребован запуск...
-
-
- This debugger cannot handle user input.
- Этот отладчик не поддерживает пользовательский ввод.
-
-
- Data breakpoint %1 (%2) at %3 triggered.
- Сработала контрольная точка %1 (%2) на 0x%3.
-
-
- Internal data breakpoint %1 at %2 triggered.
- Сработала внутренняя контрольная точка %1 на 0x%2.
-
-
- Data breakpoint %1 (%2) at %3 in thread %4 triggered.
- Сработала контрольная точка %1 (%2) на 0x%3 в потоке %4.
-
-
- Internal data breakpoint %1 at %2 in thread %3 triggered.
- Сработала внутренняя контрольная точка %1 на %2 в потоке %3.
-
-
- Data breakpoint %1 (%2) at 0x%3 triggered.
- Сработала контрольная точка %1 (%2) на 0x%3.
-
-
- Internal data breakpoint %1 at 0x%2 triggered.
- Сработала внутренняя контрольная точка %1 на 0x%2.
-
-
- Data breakpoint %1 (%2) at 0x%3 in thread %4 triggered.
- Сработала контрольная точка %1 (%2) на 0x%3 в потоке %4.
-
-
- Internal data breakpoint %1 at 0x%2 in thread %3 triggered.
- Сработала внутренняя контрольная точка %1 на 0x%2 в потоке %3.
-
-
- Stopped at breakpoint %1 (%2) in thread %3.
- Остановлено на точке останова %1 (%2), поток %3.
-
-
- Stopped at internal breakpoint %1 in thread %2.
- Остановлено на внутренней точке останова %1, поток %2.
-
-
- <Unknown>
- name
- <Неизвестный>
-
-
- <Unknown>
- meaning
- <Неизвестно>
-
-
- Found.
- Найдена.
-
-
- Not found.
- Не найдена.
-
-
- Section %1: %2
- Секция %1: %2
-
-
- Warning
- Предупреждение
-
-
- This does not seem to be a "Debug" build.
-Setting breakpoints by file name and line number may fail.
- Это не похоже на отладочную сборку.
-Установка точек останова по имени файла и строке может не работать.
-
-
- Stopped.
- Остановлено.
-
-
- Launching Debugger
- Запуск отладчика
-
-
- Stopped: "%1"
- Остановлено: «%1»
-
-
- Stopped: %1 (Signal %2).
- Остановлено: %1 (сигнал %2).
-
-
- Stopped in thread %1 by: %2.
- Поток %1 остановлен по причине: %2.
-
-
- Interrupted.
- Прервано.
-
-
- <p>The inferior stopped because it received a signal from the Operating System.<p><table><tr><td>Signal name : </td><td>%1</td></tr><tr><td>Signal meaning : </td><td>%2</td></tr></table>
- <p>Приложение остановлено, так как оно получило сигнал от операционной системы.<p><table><tr><td>Сигнал: </td><td>%1</td></tr><tr><td>Назначение: </td><td>%2</td></tr></table>
-
-
- Signal received
- Получен сигнал
-
-
- <p>The inferior stopped because it triggered an exception.<p>%1
- <p>Приложение остановлено из-за исключения.<p>%1
-
-
- Exception Triggered
- Возникло исключение
-
-
- Taking notice of pid %1
- Получено уведомление от pid %1
-
-
- Run to Address 0x%1
- Выполнить до адреса 0x%1
-
-
- Run to Line %1
- Выполнить до строки %1
-
-
- Jump to Address 0x%1
- Перейти на адрес 0x%1
-
-
- Jump to Line %1
- Перейти к строке %1
-
-
-
- Debugger::DebuggerEnginePrivate
-
- Debugged executable
- Отлаживаемая программа
-
-
- Attempting to interrupt.
- Попытка прервать.
-
-
Debugger::DebuggerItemManager
@@ -9148,13 +9349,29 @@ Setting breakpoints by file name and line number may fail.
The debugger location must be given as an absolute path (%1).
Путь к отладчику должен быть абсолютным (%1).
+
+ Name of Debugger
+ Имя отладчика
+
Type of Debugger Backend
Тип отладчика
- unknown
- неизвестный
+ Unknown debugger type
+ Неизвестный тип отладчика
+
+
+ Unknown debugger
+ Неизвестный отладчик
+
+
+ Unknown debugger version
+ Неизвестная версия отладчика
+
+
+ Unknown debugger ABI
+ Неизвестный ABI отладчика
No Debugger
@@ -9181,6 +9398,94 @@ Setting breakpoints by file name and line number may fail.
Комплект не найден.
+
+ Debugger::DebuggerOptionsPage
+
+ Not recognized
+ Не определён
+
+
+ Name
+ Имя
+
+
+ Location
+ Размещение
+
+
+ Type
+ Тип
+
+
+ Auto-detected
+ Обнаруженный
+
+
+ Manual
+ Особые
+
+
+ Unknown
+ Неизвестный
+
+
+ Name:
+ Имя:
+
+
+ Path:
+ Путь:
+
+
+ Type:
+ Тип:
+
+
+ ABIs:
+ ABI:
+
+
+ Version:
+ Версия:
+
+
+ 64-bit version
+ 64-х битная версия
+
+
+ 32-bit version
+ 32-х битная версия
+
+
+ <html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html>
+ Label text for path configuration. %2 is "x-bit version".
+ <html><body><p>Укажите здесь путь к <a href="%1">программе Windows Console Debugger</a> (%2).</p></body></html>
+
+
+ Add
+ Добавить
+
+
+ Clone
+ Копировать
+
+
+ Remove
+ Удалить
+
+
+ Clone of %1
+ Копия %1
+
+
+ New Debugger
+ Новый отладчик
+
+
+ Debuggers
+ Отладчики
+
+
Debugger::DebuggerRunConfigurationAspect
@@ -9240,10 +9545,6 @@ Setting breakpoints by file name and line number may fail.
Load Core File
Загрузить файл дампа
-
- Browse...
- Обзор...
-
Use local core file:
Использовать файл дампа:
@@ -9419,6 +9720,46 @@ Setting breakpoints by file name and line number may fail.
Breakpoint Address:
Адрес точки останова:
+
+ Data breakpoint %1 (%2) at %3 triggered.
+ Сработала контрольная точка %1 (%2) на %3.
+
+
+ Internal data breakpoint %1 at %2 triggered.
+ Сработала внутренняя контрольная точка %1 на %2.
+
+
+ Data breakpoint %1 (%2) at %3 in thread %4 triggered.
+ Сработала контрольная точка %1 (%2) на %3 в потоке %4.
+
+
+ Internal data breakpoint %1 at %2 in thread %3 triggered.
+ Сработала внутренняя контрольная точка %1 на %2 в потоке %3.
+
+
+ Data breakpoint %1 (%2) at 0x%3 triggered.
+ Сработала контрольная точка %1 (%2) на 0x%3.
+
+
+ Internal data breakpoint %1 at 0x%2 triggered.
+ Сработала внутренняя контрольная точка %1 на 0x%2.
+
+
+ Data breakpoint %1 (%2) at 0x%3 in thread %4 triggered.
+ Сработала контрольная точка %1 (%2) на 0x%3 в потоке %4.
+
+
+ Internal data breakpoint %1 at 0x%2 in thread %3 triggered.
+ Сработала внутренняя контрольная точка %1 на 0x%2 в потоке %3.
+
+
+ Stopped at breakpoint %1 (%2) in thread %3.
+ Остановлено на точке останова %1 (%2), поток %3.
+
+
+ Stopped at internal breakpoint %1 in thread %2.
+ Остановлено на внутренней точке останова %1, поток %2.
+
Property
Свойство
@@ -9539,8 +9880,8 @@ Setting breakpoints by file name and line number may fail.
Debugger::Internal::BreakTreeView
- Delete Breakpoint
- Убрать точку останова
+ Delete Selected Breakpoints
+ Удалить выбранные точки останова
Delete All Breakpoints
@@ -9845,10 +10186,6 @@ This feature is only available for GDB.
Separate Window
Отдельное окно
-
- Image
- Изображение
-
There is no CDB executable specified.
Программа CDB не указана.
@@ -10109,62 +10446,145 @@ This feature is only available for GDB.
- Debugger::Internal::DebuggerItemConfigWidget
+ Debugger::Internal::DebuggerEngine
- Unknown
- Неизвестно
+ Launching Debugger
+ Запуск отладчика
- Name:
- Название:
+ Setup failed.
+ Не удалось настроить.
- Path:
- Путь:
+ Loading finished.
+ Загрузка завершена.
- ABIs:
- ABI:
+ Run failed.
+ Запуск неудачно завершился.
- Version:
- Версия:
+ Running.
+ Выполняется.
- 64-bit version
- 64-х битная версия
+ Stopped.
+ Остановлено.
- 32-bit version
- 32-х битная версия
+ Run requested...
+ Потребован запуск...
- <html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html>
- Label text for path configuration. %2 is "x-bit version".
- <html><body><p>Укажите здесь путь к <a href="%1">программе Windows Console Debugger</a> (%2).</p></body></html>
+ The %1 process terminated.
+ Процесс %1 завершён.
+
+
+ The %2 process terminated unexpectedly (exit code %1).
+ Процесс %2 неожиданно завершился (код: %1).
+
+
+ Stopped: "%1".
+ Остановлено: «%1».
+
+
+ <p>The inferior stopped because it received a signal from the operating system.<p><table><tr><td>Signal name : </td><td>%1</td></tr><tr><td>Signal meaning : </td><td>%2</td></tr></table>
+ <p>Приложение остановлено, так как оно получило сигнал от операционной системы.<p><table><tr><td>Сигнал: </td><td>%1</td></tr><tr><td>Назначение: </td><td>%2</td></tr></table>
+
+
+ Signal Received
+ Получен сигнал
+
+
+ Unexpected %1 Exit
+ Неожиданный выход %1
+
+
+ Taking notice of pid %1
+ Получено уведомление от pid %1
+
+
+ This debugger cannot handle user input.
+ Этот отладчик не поддерживает пользовательский ввод.
+
+
+ Stopped: %1 (Signal %2).
+ Остановлено: %1 (сигнал %2).
+
+
+ Stopped in thread %1 by: %2.
+ Поток %1 остановлен по причине: %2.
+
+
+ Interrupted.
+ Прервано.
+
+
+ <Unknown>
+ name
+ <Неизвестный>
+
+
+ <Unknown>
+ meaning
+ <Неизвестно>
+
+
+ <p>The inferior stopped because it triggered an exception.<p>%1
+ <p>Приложение остановлено из-за исключения.<p>%1
+
+
+ Exception Triggered
+ Возникло исключение
+
+
+ Found.
+ Найдена.
+
+
+ Not found.
+ Не найдена.
+
+
+ Section %1: %2
+ Секция %1: %2
+
+
+ Warning
+ Предупреждение
+
+
+ This does not seem to be a "Debug" build.
+Setting breakpoints by file name and line number may fail.
+ Это не похоже на отладочную сборку.
+Установка точек останова по имени файла и строке может не работать.
+
+
+ Run to Address 0x%1
+ Выполнить до адреса 0x%1
+
+
+ Run to Line %1
+ Выполнить до строки %1
+
+
+ Jump to Address 0x%1
+ Перейти на адрес 0x%1
+
+
+ Jump to Line %1
+ Перейти к строке %1
- Debugger::Internal::DebuggerItemModel
+ Debugger::Internal::DebuggerEnginePrivate
- Auto-detected
- Обнаруженные
+ Debugged executable
+ Отлаживаемая программа
- Manual
- Особые
-
-
- Name
- Имя
-
-
- Path
- Путь
-
-
- Type
- Тип
+ Attempting to interrupt.
+ Попытка прервать.
@@ -10193,37 +10613,6 @@ This feature is only available for GDB.
Панель отладчика
-
- Debugger::Internal::DebuggerOptionsPage
-
- Debuggers
- Отладчики
-
-
- Add
- Добавить
-
-
- Clone
- Копировать
-
-
- Remove
- Удалить
-
-
- Clone of %1
- Копия %1
-
-
- New Debugger
- Новый отладчик
-
-
- Not recognized
- Не определён
-
-
Debugger::Internal::DebuggerPane
@@ -10452,10 +10841,6 @@ Qt Creator не может подключиться к нему.
Start and Debug External Application...
Запустить внешнее приложение для отладки...
-
- Start Remote Debug Server Attached to Process...
- Запустить сервер удалённой отладки подключённый к процессу...
-
Attach to Running Application...
Подключить к запущенному приложению...
@@ -10540,7 +10925,7 @@ Qt Creator не может подключиться к нему.
Debugger Runtime
- Выполнение отладчика
+ Программа отладчика
Cannot attach to process with PID 0
@@ -10594,6 +10979,14 @@ Qt Creator не может подключиться к нему.
Add Expression Evaluator
Добавить вычисляемое выражение
+
+ Attach to Running Debug Server...
+ Подключиться к серверу отладки...
+
+
+ Start Debug Server Attached to Process...
+ Запустить сервер отладки подключённый к процессу...
+
Select
Выбрать
@@ -10654,10 +11047,6 @@ Qt Creator не может подключиться к нему.
Restart the debugging session.
Перезапустить сессию отладки.
-
- Attach to Remote Debug Server...
- Подключиться к внешнему серверу отладки...
-
Attach to Unstarted Application...
Подключение к незапущенному приложению...
@@ -10735,33 +11124,6 @@ Qt Creator не может подключиться к нему.
Показывать приложение поверх всех
-
- Debugger::Internal::DebuggerRunConfigWidget
-
- Debugger Settings
- Настройки отладчика
-
-
- Enable C++
- Включить C++
-
-
- Enable QML
- Включить QML
-
-
- Debug port:
- Порт отладки:
-
-
- <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">What are the prerequisites?</a>
- <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">Зачем нужно?</a>
-
-
- Enable Debugging of Subprocesses
- Допускать отладку дочерних процессов
-
-
Debugger::Internal::DebuggerSettings
@@ -10798,6 +11160,14 @@ Qt Creator не может подключиться к нему.
Operate by Instruction
Уровень инструкций
+
+ Native Mixed Mode
+ Родной смешанный режим
+
+
+ This switches the debugger to native-mixed operation mode. In this mode, stepping and data display will be handled by the native debugger backend (GDB, LLDB or CDB) for C++, QML and JS sources.
+ Переключает отладчик в родной-смешанный режим работы. В этом режиме шаги и отображение данные обрабатывается родным отладчиком (GDB, LLDB или CDB) для C++, QML и JS.
+
Dereference Pointers Automatically
Автоматически разыменовывать указатели
@@ -11035,7 +11405,27 @@ Qt Creator не может подключиться к нему.
%1 (предыдущее)
- %1 (Restored
+ Copy Contents to Clipboard
+ Скопировать содержимое в буфер обмена
+
+
+ Name
+ Имя
+
+
+ Value
+ Значение
+
+
+ Type
+ Тип
+
+
+ Expression %1 in function %2 from line %3 to %4
+ Выражение %1 в функции %2 со строки %3 по %4
+
+
+ %1 (Restored)
%1 (восстановлено)
@@ -11053,6 +11443,18 @@ Qt Creator не может подключиться к нему.
Attached to process %1.
Подключено к процессу %1.
+
+ Attached to running application
+ Подключено к работающему приложению
+
+
+ Failed to attach to application: %1
+ Не удалось подключиться к приложению: %1
+
+
+ Debugger Error
+ Ошибка отладчика
+
Debugger::Internal::GdbCoreEngine
@@ -11247,10 +11649,6 @@ Try: %2
Не удалось подключиться к удалённому серверу:
%1
-
- Normal
- Обычный
-
An unknown error in the gdb process occurred.
У процесса gdb возникла неопознанная ошибка.
@@ -11259,10 +11657,6 @@ Try: %2
An exception was triggered:
Возникло исключение:
-
- Displayed
- Отображённый
-
Stopped.
Остановлено.
@@ -11275,18 +11669,6 @@ Try: %2
GDB I/O Error
Ошибка вводы/вывода GDB
-
- The gdb process terminated.
- Процесс gdb завершён.
-
-
- The gdb process terminated unexpectedly (code %1)
- Процесс gdb неожиданно завершён (код %1)
-
-
- Unexpected GDB Exit
- Неожиданный выход GDB
-
Adapter start failed
Не удалось запустить адаптер
@@ -11373,10 +11755,6 @@ You can choose between waiting longer or aborting debugging.
Value changed from %1 to %2.
Значение изменилось с %1 на %2.
-
- Raw structure
- Простая структура
-
Execution Error
Ошибка выполнения
@@ -11788,6 +12166,10 @@ receives a signal like SIGSEGV during debugging.
Adapter start failed.
Не удалось запустить адаптер.
+
+ Setting up inferior...
+ Настройка подчинённого...
+
Running requested...
Потребован запуск...
@@ -12126,10 +12508,6 @@ Stepping into the module or setting breakpoints by file and line is expected to
Python Error
Ошибка Python
-
- String literal %1
- Строковый литерал %1
-
Pdb I/O Error
Ошибка вводы/вывода pdb
@@ -12138,14 +12516,6 @@ Stepping into the module or setting breakpoints by file and line is expected to
Unable to start pdb "%1": %2
Не удалось запустить pdb «%1»: %2
-
- "%1" contains no identifier
- «%1» не содержит идентификаторов
-
-
- Cowardly refusing to evaluate expression "%1" with potential side effects
- Робкий отказ вычислить выражение «%1» с возможными побочными эффектами
-
The Pdb process failed to start. Either the invoked program "%1" is missing, or you may have insufficient permissions to invoke the program.
Процесс Pdb не смог запуститься. Или вызываемая программа «%1» отсутствует, или у вас нет прав на её вызов.
@@ -12279,33 +12649,6 @@ Do you want to retry?
Свойства
-
- Debugger::Internal::QmlLiveTextPreview
-
- The %1 attribute at line %2, column %3 cannot be changed without reloading the QML application.
- Нельзя изменить атрибут %1 в строке %2 позиции %3 без перезагрузки приложения QML.
-
-
- The %1 element at line %2, column %3 cannot be changed without reloading the QML application.
- Нельзя изменить элемент %1 в строке %2 позиции %3 без перезагрузки приложения QML.
-
-
- The changes in JavaScript cannot be applied without reloading the QML application.
- Изменения в JavaScript не вступят в силу без перезагрузки приложения QML.
-
-
- The changes made cannot be applied without reloading the QML application.
- Данные изменения не вступят в силу без перезагрузки приложения QML.
-
-
- You can continue debugging, but behavior can be unexpected.
- Можно продолжить отладку, только поведение может быть неожиданным.
-
-
- Reload QML
- Перезагрузить QML
-
-
Debugger::Internal::QmlV8DebuggerClient
@@ -12315,13 +12658,25 @@ Do you want to retry?
Debugger::Internal::RegisterHandler
+
+ Content as ASCII Characters
+ В виде ASCII символов
+
+
+ Content as %1-bit Integer Values
+ В виде %1-битных целых
+
+
+ Contents as %1-bit Floating Point Values
+ В виде %1-битных действительных
+
Name
Имя
- Value (Base %1)
- Значение (основание %1)
+ Value
+ Значение
@@ -12386,6 +12741,33 @@ Do you want to retry?
Двоичный
+
+ Debugger::Internal::RunConfigWidget
+
+ Debugger Settings
+ Настройки отладчика
+
+
+ Enable C++
+ Включить C++
+
+
+ Enable QML
+ Включить QML
+
+
+ Debug port:
+ Порт отладки:
+
+
+ <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">What are the prerequisites?</a>
+ <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">Зачем нужно?</a>
+
+
+ Enable Debugging of Subprocesses
+ Допускать отладку дочерних процессов
+
+
Debugger::Internal::SelectRemoteFileDialog
@@ -12735,6 +13117,37 @@ Do you want to retry?
<html><head/><body><p>Отладчик не настроен на использование публичного сервера символов Microsoft.<br>Рекомендуется его настроить для получения символов системных библиотек.</p><p><span style=" font-style:italic;">Внимание:</span> Рекомендуется сервер символов Microsoft использовать совместно с локальным кэшем.<br>Также для комфортной работы необходимо быстрое соединение с Интернет, при этом возможна задержка при первом подключении для кэширования символов.</p><p>Желаете настроить?</p></body></html>
+
+ Debugger::Internal::Terminal
+
+ Terminal: Cannot open /dev/ptmx: %1
+ Терминал: не удалось открыть /dev/ptmx: %1
+
+
+ Terminal: ptsname failed: %1
+ Терминал: ошибка ptsname: %1
+
+
+ Terminal: Error: %1
+ Терминал: ошибка: %1
+
+
+ Terminal: Slave is no character device.
+ Терминал: подчинённый не является символьным устройством.
+
+
+ Terminal: grantpt failed: %1
+ Терминал: ошибка grantpt: %1
+
+
+ Terminal: unlock failed: %1
+ Терминал: ошибка unlock: %1
+
+
+ Terminal: Read failed: %1
+ Терминал: ошибка чтения: %1
+
+
Debugger::Internal::ThreadsHandler
@@ -12980,12 +13393,12 @@ Do you want to retry?
- %1 Object at %2
- Объект типа %1 по адресу %2
+ Remove All Expression Evaluators
+ Удаление всех вычисляемых выражений
- %1 Object at Unknown Address
- Объект типа %1 по неизвестному адресу
+ Are you sure you want to remove all expression evaluators?
+ Удалить все вычисляемые выражения?
Name
@@ -12994,10 +13407,6 @@ Do you want to retry?
Debugger::Internal::WatchModel
-
- Root
- Корень
-
Locals
Локальные переменные
@@ -13042,10 +13451,18 @@ Do you want to retry?
Массив из %n элементов
+
+ Automatic
+ Автоматический
+
Raw Data
Сырые данные
+
+ Enhanced
+ Расширенный
+
Latin1 String
Строка Latin1
@@ -13074,6 +13491,30 @@ Do you want to retry?
UTF-8 String in Separate Window
Строка UTF-8 в отдельном окне
+
+ Plot in Separate Window
+ Отобразить в отдельном окне
+
+
+ Display Keys and Values Side by Side
+ Отображать значение напротив имени
+
+
+ Force Display as Direct Storage Form
+ Отображать в прямом порядке
+
+
+ Force Display as Indirect Storage Form
+ Отображать в непрямом порядке
+
+
+ Display Boolean Values as True or False
+ Отображать булевы значения, как True и False
+
+
+ Display Boolean Values as 1 or 0
+ Отображать булевы значения, как 1 и 0
+
Decimal Integer
Десятичное целое
@@ -13098,6 +13539,14 @@ Do you want to retry?
Scientific Float
Научное действительное
+
+ %1 Object at %2
+ Объект типа %1 по адресу %2
+
+
+ %1 Object at Unknown Address
+ Объект типа %1 по неизвестному адресу
+
Debugger::Internal::WatchTreeView
@@ -13159,6 +13608,10 @@ Do you want to retry?
Add New Expression Evaluator...
Добавить вычисляемое выражение...
+
+ Remove All Expression Evaluators
+ Удалить все вычисляемые выражения
+
Change Local Display Format...
Сменить локальный формат отображения...
@@ -13473,6 +13926,13 @@ Rebuilding the project might help.
Невозможно добавить определение метода.
+
+ DeviceProcessesDialog
+
+ &Attach to Process
+ &Подключиться к процессу
+
+
Diff
@@ -13496,22 +13956,30 @@ Rebuilding the project might help.
- DiffEditor::DiffEditor
+ DiffEditor::DiffEditorController
+
+ and %n more
+ Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'"
+
+ и ещё %n
+ и ещё %n
+ и ещё %n
+
+
+
+
+ DiffEditor::Internal::DiffEditor
Ignore Whitespace
Игнорировать пробелы
- Context Lines:
+ Context lines:
Контекстные строки:
- Synchronize Horizontal Scroll Bars
- Согласовать горизонтальные полосы прокрутки
-
-
- Reload Editor
- Перезагрузить редактор
+ Reload Diff
+ Перезагрузить изменения
[%1] vs. [%2] %3
@@ -13533,45 +14001,14 @@ Rebuilding the project might help.
Show Change Description
Показать описание изменения
-
- Switch to Side By Side Diff Editor
- Переключиться в двусторонний редактор отличий
-
-
- Switch to Unified Diff Editor
- Переключиться в унифицированный редактор отличий
-
- DiffEditor::DiffEditorController
-
- No difference
- Различий нет
-
-
- and %n more
- Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'"
-
- и ещё %n
- и ещё %n
- и ещё %n
-
-
-
-
- DiffEditor::DiffEditorDocument
+ DiffEditor::Internal::DiffEditorDocument
Could not parse patch file "%1". The content is not of unified diff format.
Не удалось разобрать файл изменений «%1». Содержимое не в формате «унифицированный diff».
-
- DiffEditor::DiffEditorManager
-
- Waiting for data...
- Ожидание данных...
-
-
DiffEditor::Internal::DiffEditorPlugin
@@ -13592,7 +14029,7 @@ Rebuilding the project might help.
- DiffEditor::SideBySideDiffEditorWidget
+ DiffEditor::Internal::SideBySideDiffEditorWidget
Skipped %n lines...
@@ -13609,10 +14046,6 @@ Rebuilding the project might help.
Skipped unknown number of lines...
Пропущено неизвестное количество строк...
-
- No controller
- Не контролируется
-
No difference
Различий нет
@@ -13655,17 +14088,28 @@ Rebuilding the project might help.
- DiffEditor::SideDiffEditorWidget
+ DiffEditor::Internal::SideBySideView
+
+ Synchronize Horizontal Scroll Bars
+ Согласовать горизонтальные полосы прокрутки
+
+
+ Waiting for data...
+ Ожидание данных...
+
+
+
+ DiffEditor::Internal::SideDiffEditorWidget
[%1] %2
[%1] %2
- DiffEditor::UnifiedDiffEditorWidget
+ DiffEditor::Internal::UnifiedDiffEditorWidget
- No controller
- Не контролируется
+ No document
+ Нет документа
Send Chunk to CodePaster...
@@ -13704,8 +14148,29 @@ Rebuilding the project might help.
Применить фрагмент?
- No difference
- Различий нет
+ No difference.
+ Различий нет.
+
+
+
+ DiffEditor::Internal::UnifiedView
+
+ Waiting for data...
+ Ожидание данных...
+
+
+
+ DiffEditor::SideBySideView
+
+ Switch to Side By Side Diff Editor
+ Переключиться в двусторонний редактор отличий
+
+
+
+ DiffEditor::UnifiedView
+
+ Switch to Unified Diff Editor
+ Переключиться в унифицированный редактор отличий
@@ -14364,26 +14829,26 @@ Reason: %3
User command #%1
Команда пользователя #%1
-
- Meta+V,Meta+V
- Meta+V,Meta+V
-
Alt+V,Alt+V
Alt+V,Alt+V
+
+ Meta+Shift+V,Meta+Shift+V
+ Meta+Shift+V,Meta+Shift+V
+
Execute User Action #%1
Выполнить особое действие №%1
-
- Meta+V,%1
- Meta+V,%1
-
Alt+V,%1
Alt+V,%1
+
+ Meta+Shift+V,%1
+ Meta+Shift+V,%1
+
"%1" %2 %3L, %4C written
«%1» %2 %3L, %4C записано
@@ -14766,6 +15231,29 @@ Reason: %3
+
+ GenericHighlighter
+
+ Generic highlighter error:
+ Ошибка подсветки:
+
+
+ Reached empty context.
+ Получен пустой контекст.
+
+
+ Element name is empty.
+ Имя элемента пусто.
+
+
+ Duplicate element name "%1".
+ Дублирующееся имя элемента «%1».
+
+
+ Name "%1" not found.
+ Имя «%1» не найдено.
+
+
GenericProjectManager::GenericTarget
@@ -15136,18 +15624,6 @@ were not verified among remotes in %3. Select different folder?
Push to Gerrit
Отправка в Gerrit
-
- <b>Local repository:</b>
- <b>Локальное хранилище:</b>
-
-
- Destination:
- Назначение:
-
-
- R&emote:
- С&ервер:
-
&Topic:
&Тема:
@@ -15160,10 +15636,6 @@ were not verified among remotes in %3. Select different folder?
Number of commits
Число фиксаций
-
- &Push up to commit:
- От&править до фиксации:
-
Pushes the selected commit and all dependent commits.
Будут отправлены выбранная фиксация и все её зависимости.
@@ -15172,10 +15644,6 @@ were not verified among remotes in %3. Select different folder?
&Reviewers:
&Рецензенты:
-
- <b>Local repository:</b> %1
- <b>Локальное хранилище:</b> %1
-
Number of commits between %1 and %2: %3
Число фиксаций между %1 и %2: %3
@@ -15184,14 +15652,6 @@ were not verified among remotes in %3. Select different folder?
... Include older branches ...
... Включить более старые ветки ...
-
- &Local branch:
- &Локальная ветка:
-
-
- Target &branch:
- &Целевая ветка:
-
Comma-separated list of reviewers.
@@ -15204,6 +15664,22 @@ Partial names can be used if they are unambiguous.
Допустимы частичные имена, если нет двойного их толкования.
+
+ Push:
+ Отправить:
+
+
+ Commits:
+ Фиксации:
+
+
+ Local repository
+ Локальное хранилище
+
+
+ To:
+ В:
+
Gerrit::Internal::QueryContext
@@ -15620,10 +16096,6 @@ Would you like to terminate it?
Git::Internal::GitClient
-
- Waiting for data...
- Ожидание данных...
-
Invalid revision
Некорректная ревизия
@@ -16018,22 +16490,15 @@ Commit now?
Отменить
-
- Git::Internal::GitDiffHandler
-
- Waiting for data...
- Ожидание данных...
-
-
Git::Internal::GitEditorWidget
- Blame %1
- Аннотация %1
+ &Blame %1
+ &Аннотация %1
- Blame Parent Revision %1
- Аннотация родительской ревизии %1
+ Blame &Parent Revision %1
+ Аннотация &родительской ревизии %1
Reset
@@ -16056,20 +16521,36 @@ Commit now?
Отменить фрагмент...
- Cherry-Pick Change %1
- Внести изменение %1
+ Cherr&y-Pick Change %1
+ &Внести изменение %1
- Revert Change %1
- Откатить изменение %1
+ Re&vert Change %1
+ &Откатить изменение %1
- Checkout Change %1
- Перейти к изменению %1
+ C&heckout Change %1
+ &Перейти к изменению %1
- Hard Reset to Change %1
- Жесткий откат до изменения %1
+ &Log for Change %1
+ &Журнал изменения %1
+
+
+ &Reset to Change %1
+ От&катиться к %1
+
+
+ &Hard
+ Жё&стко (--hard)
+
+
+ &Mixed
+ С&мешанно
+
+
+ &Soft
+ &Мягко (--soft)
@@ -16421,6 +16902,14 @@ Commit now?
&Stash
Спр&ятанное
+
+ Stash Unstaged Files
+ Скрыть неподготовленные файлы
+
+
+ Saves the current state of your unstaged files and resets the repository to its staged state.
+ Сохранение текущего состояния неподготовленных файлов и сброс хранилища в подготовленное состояние.
+
&Remote Repository
&Внешнее хранилище
@@ -17226,6 +17715,10 @@ You can choose between stashing the changes or discarding them.
Unable to register documentation.
Не удалось зарегистрировать документацию.
+
+ %1 (auto-detected)
+ %1 (автоопределённое)
+
Add and remove compressed help files, .qch.
Добавление и удаление сжатых файлов справки, .qch.
@@ -17550,8 +18043,8 @@ Add, modify, and remove document filters, which determine the documentation set
Показать закладки справки
- Meta+B
- Meta+B
+ Alt+Meta+M
+ Alt+Meta+M
Ctrl+Shift+B
@@ -18346,6 +18839,73 @@ Ids must begin with a lowercase letter.
Дополнительно
+
+ LayoutPoperties
+
+ Alignment
+ Выравнивание
+
+
+ Alignment of an item within the cells it occupies.
+ Выравнивание элемента по занимаемым им ячейкам.
+
+
+ Fill layout
+ Заполнить компоновщик
+
+
+ The item will expand as much as possible while respecting the given constraints if true.
+ Элемент будет растянут на сколько позволят его ограничения.
+
+
+ Fill width
+ Растянуть по горизонтали
+
+
+ Fill height
+ Растянуть по вертикали
+
+
+ Preferred size
+ Предпочтительный размер
+
+
+ Preferred height of an item in a layout. If the preferred height is -1, it will be ignored.
+ Предпочтительный резмер элемента в компоновщике. Если он -1, то игнорируется.
+
+
+ Minimum size
+ Минимальный размер
+
+
+ Minimum size of an item in a layout.
+ Минимальный размер в компоновщике.
+
+
+ Maximum size
+ Максимальный размер
+
+
+ Maximum size of an item in a layout.
+ Максимальный размер в компоновщике.
+
+
+ Row span
+ Межстрочный интервал
+
+
+ Row span of an item in a GridLayout.
+ Расстояние между рядами элементов в GrigLayout.
+
+
+ Column span
+ Межстолбцовый интервал
+
+
+ Column span of an item in a GridLayout.
+ Расстояние между столбцами элементов в GridLayout.
+
+
LayoutSection
@@ -18492,8 +19052,8 @@ Ids must begin with a lowercase letter.
Macros::Internal::MacroLocatorFilter
- Macros
- Сценарии
+ Text Editing Macros
+ Сценарии редактирования текста
@@ -18552,10 +19112,6 @@ Ids must begin with a lowercase letter.
Macros::Internal::MacrosPlugin
-
- &Macros
- С&ценарии
-
Record Macro
Записать сценарий
@@ -18588,6 +19144,10 @@ Ids must begin with a lowercase letter.
Ctrl+)
+
+ Text Editing &Macros
+ С&ценарии редактирования текста
+
Alt+)
@@ -18782,12 +19342,12 @@ Ids must begin with a lowercase letter.
Mercurial::Internal::MercurialEditorWidget
- Annotate %1
- Аннотация %1
+ &Annotate %1
+ &Аннотация %1
- Annotate parent revision %1
- Аннотация родительской ревизии %1
+ Annotate &parent revision %1
+ Аннотация &родительской ревизии %1
@@ -19113,33 +19673,17 @@ Ids must begin with a lowercase letter.
Файл проекта CMake
- C Source file
- Файл исходных текстов C
-
-
- C Header file
+ C header
Заголовочный файл C
-
- C++ Header file
- Заголовочный файл C++
-
C++ header
Заголовочный файл C++
-
- C++ Source file
- Файл исходных текстов C++
-
C++ source code
Файл исходных текстов C++
-
- Objective-C source code
- Файл исходных текстов Objective-C
-
Objective-C++ source code
Файл исходных текстов Objective-C++
@@ -19148,10 +19692,6 @@ Ids must begin with a lowercase letter.
CVS submit template
Шаблон сообщения о фиксации CVS
-
- Qt Designer file
- Файл Qt Designer
-
Git Commit File
Файл фиксации Git
@@ -19181,8 +19721,8 @@ Ids must begin with a lowercase letter.
Файл геометрического шейдера GLSL/ES
- Python Source File
- Файл исходных текстов Python
+ WebP Image file
+ Файл изображения WebP
Qt Project configuration file
@@ -19204,70 +19744,10 @@ Ids must begin with a lowercase letter.
Generic Qt Creator Project file
Файл универсального проекта Qt Creator
-
- Java Source file
- Исходный файл Java
-
-
- Automake based Makefile
- Makefile основанный на Automake
-
ClearCase submit template
Шаблон сообщения о фиксации ClearCase
-
- BMP image
- Изображение BMP
-
-
- GIF image
- Изображение GIF
-
-
- ICO image
- Изображение ICO
-
-
- JPEG image
- Изображение JPEG
-
-
- MNG video
- Видео MNG
-
-
- PBM image
- Изображение PBM
-
-
- PGM image
- Изображение PGM
-
-
- PNG image
- Изображение PNG
-
-
- PPM image
- Изображение PPM
-
-
- SVG image
- Изображение SVG
-
-
- TIFF image
- Изображение TIFF
-
-
- XBM image
- Изображение XBM
-
-
- XPM image
- Изображение XPM
-
Generic Project Files
Файлы универсальных проектов
@@ -19297,12 +19777,20 @@ Ids must begin with a lowercase letter.
Файл опции проекта Qt
- message catalog
- Исходный файл перевода
+ Android manifest file
+ Файл манифеста Android
- Qt Script file
- Файл сценария Qt
+ NVIDIA CUDA C source code
+ Исходный код C NVIDIA CUDA
+
+
+ Qt MOC file
+ Файл Qt MOC
+
+
+ Python source file without console
+ Файл исходных текстов Python без консоли
Qt Build Suite file
@@ -19324,6 +19812,18 @@ Ids must begin with a lowercase letter.
QML Project file
Файл проекта QML
+
+ BAR descriptor file (BlackBerry)
+ BAR-файл описания (BlackBerry)
+
+
+ Linguist translated messages (machine-readable)
+ Сообщения переведенные через Linguist (удобные для машины)
+
+
+ Linguist message catalog
+ Каталог сообщений Linguist
+
Qt Resource file
Файл ресурсов Qt
@@ -19336,14 +19836,6 @@ Ids must begin with a lowercase letter.
Qt Creator task list file
Файл списка задач Qt Creator
-
- Plain text document
- Обычный текстовый документ
-
-
- XML document
- Документ XML
-
Assembler
Ассемблер
@@ -19352,10 +19844,6 @@ Ids must begin with a lowercase letter.
Qt Creator Generic Assembler
Обычный ассемблер Qt Creator
-
- Differences between files
- Разница между файлами
-
ModelManagerSupportInternal::displayName
@@ -19884,6 +20372,10 @@ Ids must begin with a lowercase letter.
p4 filelog %1
p4 filelog %1
+
+ p4 changelists %1
+ p4 changelists %1
+
Could not start perforce "%1". Please check your settings in the preferences.
Не удалось запустить Perforce «%1». Пожалуйста, проверьте настройки.
@@ -19892,10 +20384,6 @@ Ids must begin with a lowercase letter.
The process terminated with exit code %1.
Процесс завершился с кодом %1.
-
- [Only %1 MB of output shown]
- [Отображено только %1 МБ вывода]
-
The commit message check failed. Do you want to submit this change list?
Проверки сообщения о фиксации завершилась с ошибкой. Отправить указанные изменения?
@@ -19942,6 +20430,14 @@ Ids must begin with a lowercase letter.
Perforce is not correctly configured.
Perforce некорректно настроен.
+
+ [Only %n MB of output shown]
+
+ [Только %n МБ вывода отображён]
+ [Только %n МБ вывода отображено]
+ [Только %n МБ вывода отображено]
+
+
p4 diff %1
p4 diff %1
@@ -20620,8 +21116,12 @@ Ids must begin with a lowercase letter.
Проект без использования Qt
- Creates a plain C project using qbs.
- Создание простого проекта C с использованием qbs.
+ Creates a plain C project using Qbs.
+ Создание простого проекта C с использованием Qbs.
+
+
+ Creates a plain (non-Qt) C++ project using Qbs.
+ Создание простого проекта С++ с использованием Qbs, но без библиотеки Qt.
Plain C Project (Qbs Build)
@@ -20643,10 +21143,6 @@ Ids must begin with a lowercase letter.
Plain C++ Project (CMake Build)
Простой проект на С++ (сборка CMake)
-
- Creates a plain (non-Qt) C++ project using qbs.
- Создание простого проекта С++ с использованием qbs и без библиотеки Qt.
-
Plain C++ Project (Qbs Build)
Простой проект на С++ (сборка Qbs)
@@ -20784,12 +21280,12 @@ Ids must begin with a lowercase letter.
Ошибка DebugBreakProcess:
- could not break the process.
- не удалось остановить процесс.
+ %1 does not exist. If you built Qt Creator yourself, check out https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.
+ %1 не существует. Если производится самостоятельная сборка Qt Creator, то посетите https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.
- %1 does not exist. If you built Qt Creator yourself, check out http://qt.gitorious.org/qt-creator/binary-artifacts.
- %1 не существует. Если производится сборка Qt Creator, то посетите http://qt.gitorious.org/qt-creator/binary-artifacts.
+ could not break the process.
+ не удалось остановить процесс.
Cannot kill process with pid %1: %2
@@ -21748,7 +22244,7 @@ Ids must begin with a lowercase letter.
ProjectExplorer::Internal::KitEnvironmentConfigWidget
- Change ...
+ Change...
Изменить...
@@ -21760,8 +22256,8 @@ Ids must begin with a lowercase letter.
Дополнительные настройки среды при использовании этого комплекта.
- No Changes to apply
- Изменений нет
+ No changes to apply.
+ Без изменений.
Edit Environment Changes
@@ -22089,8 +22585,8 @@ Ids must begin with a lowercase letter.
Спрашивать перед остановкой запущенного приложения при нажатии на кнопку остановки консоли вывода приложения.
- <i>jom</i> is a drop-in replacement for <i>nmake</i> which distributes the compilation process to multiple CPU cores. The latest binary is available at <a href="http://download.qt-project.org/official_releases/jom/">http://download.qt-project.org/official_releases/jom/</a>. Disable it if you experience problems with your builds.
- <i>jom</i> - это замена <i>nmake</i>, распределяющая процесс компиляции на несколько ядер процессора. Свежайшая сборка доступна по адресу <a href="http://download.qt-project.org/official_releases/jom/">http://download.qt-project.org/official_releases/jom/</a>. В случае проблем со сборкой отключите использование jom.
+ <i>jom</i> is a drop-in replacement for <i>nmake</i> which distributes the compilation process to multiple CPU cores. The latest binary is available at <a href="http://download.qt.io/official_releases/jom/">http://download.qt.io/official_releases/jom/</a>. Disable it if you experience problems with your builds.
+ <i>jom</i> - это замена <i>nmake</i>, распределяющая компиляцию на несколько ядер процессора. Свежайшая сборка доступна по адресу <a href="http://download.qt.io/official_releases/jom/">http://download.qt.io/official_releases/jom/</a>. В случае проблем со сборкой отключите использование jom.
@@ -22624,18 +23120,10 @@ to project "%2".
- ProjectExplorer::Internal::ToolChainModel
-
- Auto-detected
- Автоопределённая
-
-
- Manual
- Особые
-
+ ProjectExplorer::Internal::ToolChainOptionsPage
<nobr><b>ABI:</b> %1
-
+ <nobr><b>ABI:</b> %1
not up-to-date
@@ -22650,23 +23138,12 @@ to project "%2".
Тип
- Duplicate Compilers Detected
- Обнаружены повторяющиеся компиляторы
+ Auto-detected
+ Обнаруженные
- The following compiler was already configured:<br> %1<br>It was not configured again.
- Следующий компилятор уже настроен:<br> %1<br>Повторно настраиваться не будет.
-
-
- The following compilers were already configured:<br> %1<br>They were not configured again.
- Следующие компиляторы уже настроены:<br> %1<br>Повторно настраиваться не будут.
-
-
-
- ProjectExplorer::Internal::ToolChainOptionsPage
-
- Compilers
- Компиляторы
+ Manual
+ Особые
Add
@@ -22680,6 +23157,22 @@ to project "%2".
Remove
Удалить
+
+ Duplicate Compilers Detected
+ Обнаружены повторяющиеся компиляторы
+
+
+ The following compiler was already configured:<br> %1<br>It was not configured again.
+ Следующий компилятор уже настроен:<br> %1<br>Повторно настраиваться не будет.
+
+
+ The following compilers were already configured:<br> %1<br>They were not configured again.
+ Следующие компиляторы уже настроены:<br> %1<br>Повторно настраиваться не будут.
+
+
+ Compilers
+ Компиляторы
+
ProjectExplorer::Internal::VcsAnnotateTaskHandler
@@ -22751,18 +23244,6 @@ to project "%2".
Field has no name.
Поле не имеет имени.
-
- Field '%1' has no type.
- Поле «%1» не имеет типа.
-
-
- Field '%1' has unsupported type '%2'.
- Поле «%1» имеет неподдерживаемый тип «%2».
-
-
- When parsing Field '%1': %2
- При обработке поля «%1»: %2
-
Label data is not an object.
Данные Label не являются объектом.
@@ -22776,7 +23257,27 @@ to project "%2".
Данные Spacer не являются объектом.
- 'factor' is no integer value.
+ Field "%1" has no type.
+ Поле «%1» не имеет типа.
+
+
+ Line Edit Validator Expander
+ Расширитель валидатора строкового редактора
+
+
+ The text edit input to fix up.
+ Данные для исправления в текстовом редакторе.
+
+
+ Field "%1" has unsupported type "%2".
+ Поле «%1» имеет неподдерживаемый тип «%2».
+
+
+ When parsing Field "%1": %2
+ При обработке поля «%1»: %2
+
+
+ "factor" is no integer value.
Значение «factor» не является целым.
@@ -22796,9 +23297,29 @@ to project "%2".
Данные PathChooser не являются объектом.
- kind '%1' is not one of the supported 'existingDirectory', 'directory', 'file', 'saveFile', 'existingCommand', 'command', 'any'.
+ kind "%1" is not one of the supported "existingDirectory", "directory", "file", "saveFile", "existingCommand", "command", "any".
вид «%1» не один из: «existingDirectory», «directory», «file», «saveFile», «existingCommand», «command», «any».
+
+ No "key" found in ComboBox items.
+ Не найден «key» в элементах ComboBox.
+
+
+ ComboBox "index" is not an integer value.
+ Значение «index» объекта ComboBox не является целым.
+
+
+ ComboBox "disabledIndex" is not an integer value.
+ Значение «disabledIndex» объекта ComboBox не является целым.
+
+
+ ComboBox "items" missing.
+ Элемент «items» ComboBox отсутствует.
+
+
+ ComboBox "items" is not a list.
+ Поле «items» ComboBox не является списком.
+
CheckBox data is not an object.
Данные CheckBox не являются объектом.
@@ -22811,30 +23332,10 @@ to project "%2".
No lists allowed inside ComboBox items list.
Списки не допустимы внутри списка элементов ComboBox.
-
- No 'key' found in ComboBox items.
- Не найден «key» в элементах ComboBox.
-
ComboBox data is not an object.
Данные ComboBox не являются объектом.
-
- ComboBox 'index' is not a integer value.
- Значение «index» объекта ComboBox не является целым.
-
-
- ComboBox 'disabledIndex' is not a integer value.
- Значение «disabledIndex» объекта ComboBox не является целым.
-
-
- ComboBox 'items' missing.
- Элемент «items» ComboBox отсутствует.
-
-
- ComboBox 'items' is not a list.
- Поле «items» ComboBox не является списком.
-
Files data list entry is not an object.
Список файлов не является объектом.
@@ -22859,7 +23360,7 @@ to project "%2".
Ошибка фиксации контроля версий
- Error message from Version Control System: '%1'.
+ Error message from Version Control System: "%1".
Сообщение от системы контроля версий: «%1».
@@ -22950,12 +23451,22 @@ to project "%2".
Странице «Комплекты» требуется набор «projectFilePath».
- "data" for a "Project" page needs to be unset or an empty object.
- Объект «data» для страницы «Проект» должен быть не задан или пустым.
+ "data" must be empty or a JSON object for "Project" pages.
+ Объект «data» должен быть пустым или иметь тип JSON для страниц «Проект».
"data" for a "Summary" page needs to be unset or an empty object.
- Объект «data» для страницы «Итого» должен быть не задан или пустым.
+ Объект «data» для страницы «Общее» должен быть не задан или пустым.
+
+
+ "data" must be a JSON object for "VcsConfiguration" pages.
+ Do not translate "VcsConfiguration", because it is the id of a page.
+ «data» должна быть объектом JSON для страниц «VcsConfiguration».
+
+
+ "VcsConfiguration" page requires a "vcsId" set.
+ Do not translate "VcsConfiguration", because it is the id of a page.
+ Странице «VcsConfiguration» требуется заданный «vcsId».
@@ -22973,7 +23484,7 @@ to project "%2".
TypeId «%1» генератора неизвестен. Поддерживаются следующие typeId: «%2».
- Page is not a object.
+ Page is not an object.
Страница не является объектом.
@@ -23095,8 +23606,8 @@ to project "%2".
При обработке «options»: Ключ «%1» задан более одного раза.
- Value for "options" is not a list
- Значение «options» не является списком
+ Value for "options" is not a list.
+ Значение «options» не является списком.
@@ -23143,7 +23654,7 @@ to project "%2".
Название активного комплекта.
- The name of the currently active kit in a filesystem friendly version.
+ The name of the currently active kit in a filesystem-friendly version.
Название активного комплекта в пригодной для файловой системы форме.
@@ -23200,17 +23711,6 @@ to project "%2".
Сделать по умолчанию
-
- ProjectExplorer::LineEditValidator
-
- Line Edit Validator Expander
- Расширитель валидатора строкового редактора
-
-
- The text edit input to fix up.
- Данные для исправления в текстовом редакторе.
-
-
ProjectExplorer::LocalEnvironmentAspect
@@ -23424,6 +23924,10 @@ Please close all running instances of your application before starting a build.<
Collapse All
Свернуть всё
+
+ Current project's main file.
+ Главный файл текущего проекта.
+
The name of the current project.
Название текущего проекта.
@@ -23432,10 +23936,6 @@ Please close all running instances of your application before starting a build.<
The name of the currently active kit.
Название активного комплекта.
-
- The name of the currently active kit in a filesystem friendly version.
- Название активного комплекта в пригодной для файловой системы форме.
-
The id of the currently active kit.
Идентификатор активного комплекта.
@@ -23488,6 +23988,34 @@ Please close all running instances of your application before starting a build.<
The configuration that was supposed to run is no longer available.
Предполагаемая для запуска конфигурация больше не доступна.
+
+ The project %1 is not configured, skipping it.
+ Проект %1 не настроен, пропущен.
+
+
+ No project loaded.
+ Проект не загружен.
+
+
+ Currently building the active project.
+ Идёт сборка активного проекта.
+
+
+ The project %1 is not configured.
+ Проект %1 не настроен.
+
+
+ Project has no build settings.
+ Проект не имеет настроек сборки.
+
+
+ Building "%1" is disabled: %2<br>
+ Сборка «%1» отключена: %2<br>
+
+
+ Building "%1" is disabled: %2
+ Сборка «%1» отключена: %2
+
Do Not Close
Не закрывать
@@ -23500,6 +24028,10 @@ Please close all running instances of your application before starting a build.<
A build is still in progress.
Сборка ещё выполняется.
+
+ Run %1
+ Запустить %1
+
New Subproject
Title of dialog
@@ -23596,14 +24128,14 @@ Do you want to ignore them?
Quick Switch Kit Selector
Выбор быстрого переключения комплектов
-
- Current project's main file
- Главный файл текущего проекта
-
Full build path of the current project's active build configuration.
Полный путь к каталогу сборки активной конфигурации текущего проекта.
+
+ The name of the currently active kit in a filesystem-friendly version.
+ Название активного комплекта в пригодной для файловой системы форме.
+
The host address of the device in the currently active kit.
Адрес хоста устройства текущего комплекта.
@@ -23652,10 +24184,6 @@ Do you want to ignore them?
unknown
неизвестно
-
- Failed to open project
- Не удалось открыть проект
-
All Projects
Все проекты
@@ -23672,15 +24200,15 @@ Do you want to ignore them?
Could Not Run
Невозможно запустить
-
- <b>Warning:</b> This file is outside the project directory.
- <b>Предупреждение:</b> Этот файл расположен вне каталога проекта.
-
Build
Build step
Сборка
+
+ A build is in progress.
+ Выполняется сборка.
+
Cancel Build && Close
Отменить сборку и закрыть
@@ -23747,77 +24275,6 @@ Do you want to ignore them?
Удалить «%1» с диска?
-
- ProjectExplorer::ProjectExplorerPluginPrivate
-
- Build Without Dependencies
- Собрать без зависимостей
-
-
- Rebuild Without Dependencies
- Пересобрать без зависимостей
-
-
- Clean Without Dependencies
- Очистить без зависимостей
-
-
- Build
- Собрать
-
-
- Rebuild
- Пересобрать
-
-
- Clean
- Очистить
-
-
- The project %1 is not configured, skipping it.
- Проект %1 не настроен, пропущен.
-
-
- No project loaded.
- Проект не загружен.
-
-
- Currently building the active project.
- Идёт сборка активного проекта.
-
-
- The project %1 is not configured.
- Проект %1 не настроен.
-
-
- Project has no build settings.
- Проект не имеет настроек сборки.
-
-
- Building "%1" is disabled: %2<br>
- Сборка «%1» отключена: %2<br>
-
-
- No project loaded
- Проект не загружен
-
-
- A build is in progress
- Выполняется сборка
-
-
- Project has no build settings
- У проекта отсутствуют настройки сборки
-
-
- Building "%1" is disabled: %2
- Сборка «%1» отключена: %2
-
-
- Run %1
- Запустить %1
-
-
ProjectExplorer::ProjectImporter
@@ -23825,6 +24282,13 @@ Do you want to ignore them?
%1 - временный
+
+ ProjectExplorer::ProjectTree
+
+ <b>Warning:</b> This file is outside the project directory.
+ <b>Предупреждение:</b> Этот файл расположен вне каталога проекта.
+
+
ProjectExplorer::ProjectsMode
@@ -24491,6 +24955,14 @@ These files are preserved.
Please enter the password for your private key.
Введите пароль для вашего закрытого ключа.
+
+ Failed to open key file "%1" for reading: %2
+ Не удалось открыть для чтения файл ключа «%1»: %2
+
+
+ Failed to open key file "%1" for writing: %2
+ Не удалось открыть для записи файл ключа «%1»: %2
+
QSsh::SshKeyCreationDialog
@@ -24597,6 +25069,40 @@ These files are preserved.
%1 в %2
+
+ QbsProjectManager
+
+ Qbs
+ Qbs
+
+
+ Profiles
+ Профили
+
+
+
+ QbsProjectManager::Internal::CustomQbsPropertiesDialog
+
+ Custom Properties
+ Особые свойства
+
+
+ &Add
+ &Добавить
+
+
+ &Remove
+ &Удалить
+
+
+ Key
+ Ключ
+
+
+ Value
+ Значение
+
+
QbsProjectManager::Internal::QbsBuildConfiguration
@@ -24705,6 +25211,18 @@ These files are preserved.
Keep going when errors occur (if at all possible).
Продолжать сборку при ошибках (если возможно).
+
+ Show command lines
+ Показывать команды
+
+
+ Install
+ Установить
+
+
+ Clean install root
+ Очищать корень установки
+
QbsProjectManager::Internal::QbsBuildStepFactory
@@ -24803,6 +25321,48 @@ These files are preserved.
Установка с Qbs
+
+ QbsProjectManager::Internal::QbsManager
+
+ Failed opening project "%1": Project is not a file.
+ Не удалось открыть проект «%1»: проект не является файлом.
+
+
+ Failed to set up kit for Qbs: %1
+ Не удалось создать комплект для Qbs: %1
+
+
+
+ QbsProjectManager::Internal::QbsProfilesSettingsWidget
+
+ Form
+
+
+
+ Kit:
+ Комплект:
+
+
+ Associated profile:
+ Назначенный профиль:
+
+
+ Profile properties:
+ Свойства профиля:
+
+
+ E&xpand All
+ &Развернуть все
+
+
+ &Collapse All
+ &Свернуть все
+
+
+ &Edit...
+ &Изменить...
+
+
QbsProjectManager::Internal::QbsProject
@@ -24814,6 +25374,10 @@ These files are preserved.
Could not write project file %1.
Не удалось записать в файл проекта %1.
+
+ Cannot build: Selected products do not exist anymore.
+ Невозможно собрать: выбранный продукт больше не существует.
+
Reading Project "%1"
Чтение проекта «%1»
@@ -24877,13 +25441,6 @@ These files are preserved.
Не найдено двоеточие в определении свойства.
-
- QbsProjectManager::Internal::QbsRootProjectNode
-
- Qbs files
- Файлы Qbs
-
-
QbsProjectManager::Internal::QbsRunConfiguration
@@ -24931,14 +25488,10 @@ These files are preserved.
- QbsProjectManager::QbsManager
+ QbsRootProjectNode
- Failed opening project "%1": Project is not a file.
- Не удалось открыть проект «%1»: проект не является файлом.
-
-
- Failed to set up kit for Qbs: %1
- Не удалось создать комплект для Qbs: %1
+ Qbs files
+ Файлы Qbs
@@ -24980,6 +25533,10 @@ These files are preserved.
Android package source directory:
Исходный каталог пакета Android:
+
+ It is highly recommended if you are planning to extend the Java part of your Qt application.
+ Настоятельно рекомендуется в случае расширения Java-части Qt приложения.
+
Select the Android package source directory.
@@ -24996,10 +25553,6 @@ The files in the Android package source directory are copied to the build direct
Copy the Gradle files to Android directory
Копировать файлы Gradle в каталог Android
-
- It is highly recommended if you are plannig to extend the Java part of your Qt application.
- Настоятельно рекомендуется в случае расширения Java-части Qt приложения.
-
QmakeAndroidSupport::Internal::ChooseProFilePage
@@ -25064,14 +25617,14 @@ The files in the Android package source directory are copied to the build direct
Found old folder "android" in source directory. Qt 5.2 does not use that folder by default.
Обнаружен старый каталог «android» в директории исходников. Qt 5.2 не использует его по умолчанию.
-
- Internal Error: Could not find .pro file.
- Внутренняя ошибка: файл .pro не найден.
-
Internal Error: Unknown Android deployment JSON file location.
Внутренняя ошибка: JSON-файл с параметрами установки на Android не найден.
+
+ No application .pro file found, not building an APK.
+ Не найден файл .pro приложения, APK не собирается.
+
Starting: "%1" %2
Запускается: «%1» %2
@@ -25098,10 +25651,6 @@ The files in the Android package source directory are copied to the build direct
Create Templates
Создать шаблоны
-
- Input file for androiddeployqt:
- Входной файл для androiddeployqt:
-
Additional Libraries
Дополнительные библиотеки
@@ -25146,6 +25695,32 @@ The files in the Android package source directory are copied to the build direct
Идёт обработка файла .pro: «%1».
+
+ QmakePriFileNode
+
+ Failed
+ Сбой
+
+
+ Could not write project file %1.
+ Не удалось записать в файл проекта %1.
+
+
+ File Error
+ Ошибка файла
+
+
+
+ QmakeProFileNode
+
+ Error while parsing file %1. Giving up.
+ Ошибка разбора файла %1. Отмена.
+
+
+ Could not find .pro file for subdirectory "%1" in "%2".
+ Не удалось найти .pro файл для подкаталога «%1» в «%2».
+
+
QmakeProjectManager::Internal::AddLibraryWizard
@@ -25793,8 +26368,12 @@ Neither the path to the library nor the path to its includes is added to the .pr
Параметры вызова qmake:
- Use QML compiler
- Использовать компилятор QML
+ Use QML compiler:
+ Использовать компилятор QML:
+
+
+ Generate separate debug info:
+ Отделять отладочную информацию:
@@ -25845,10 +26424,6 @@ Neither the path to the library nor the path to its includes is added to the .pr
This kit cannot build this project since it does not define a Qt version.
Невозможно собрать проект данным комплектом, так как для него не задан профиль Qt.
-
- The Qt version %1 does not support shadow builds, building might fail.
- Профиль Qt %1 не поддерживает теневую сборку, поэтому она может завершиться с ошибкой.
-
Error:
Ошибка:
@@ -26186,8 +26761,8 @@ Neither the path to the library nor the path to its includes is added to the .pr
<b>qmake:</b> %1 %2
- Enable QML debugging:
- Включить отладку QML:
+ Enable QML debugging and profiling:
+ Включить отладку и профилирование QML:
Might make your application vulnerable. Only use in a safe environment.
@@ -26197,6 +26772,10 @@ Neither the path to the library nor the path to its includes is added to the .pr
Enable Qt Quick Compiler:
Включить компилятор Qt Quick:
+
+ Disables QML debugging. QML profiling will still work.
+ Выключает отладку QML. Профилирование QML продолжит работать.
+
<No Qt version>
<Профиль Qt не задан>
@@ -26298,29 +26877,6 @@ Neither the path to the library nor the path to its includes is added to the .pr
Other files
Другие файлы
-
- Failed
- Сбой
-
-
- Could not write project file %1.
- Не удалось записать в файл проекта %1.
-
-
- File Error
- Ошибка файла
-
-
-
- QmakeProjectManager::QmakeProFileNode
-
- Error while parsing file %1. Giving up.
- Ошибка разбора файла %1. Отмена.
-
-
- Could not find .pro file for sub dir "%1" in "%2"
- Не удалось найти .pro файл для подкаталога «%1» в «%2»
-
QmakeProjectManager::QmakeProject
@@ -26402,10 +26958,6 @@ Neither the path to the library nor the path to its includes is added to the .pr
Qt Quick 2.3
Qt Quick 2.3
-
- Creates a deployable Qt Quick 2 application that contains a .ui.qml file and uses Qt Quick Controls. You can review Qt Quick 2 UI projects in the QML Scene and you need not build them. This project requires that you have installed Qt Quick Controls for your Qt version. Requires Qt 5.4 or newer.
- Создание устанавливаемого приложения Qt Quick 2 с файлом .ui.qml и использованием Qt Quick Controls. Для проверки проектов с интерфейсом на Qt Quick 2 в QML Scene сборка не требуется. Этот проект требует наличия установленных Qt Quick Controls соответствующего профиля Qt. Требуется Qt версии 5.4 или выше.
-
Qt Quick 2.4
Qt Quick 2.4
@@ -26426,6 +26978,10 @@ Neither the path to the library nor the path to its includes is added to the .pr
Qt Quick Controls 1.2
Qt Quick Controls 1.2
+
+ Creates a deployable Qt Quick 2 application that contains a .ui.qml file and uses Qt Quick Controls. This project requires that you have installed Qt Quick Controls for your Qt version. Requires Qt 5.4 or newer.
+ Создание устанавливаемого приложения Qt Quick 2 с файлом .ui.qml и использованием Qt Quick Controls. Этот проект требует наличия установленных Qt Quick Controls для используемого профиля Qt. Требуется Qt версии 5.4 или выше.
+
Qt Quick Controls 1.3
Qt Quick Controls 1.3
@@ -27811,8 +28367,8 @@ Please build the qmldump application on the Qt version options page.
Функции не поддерживаются в форме Qt Quick UI.
- Java Script blocks are not supported in a Qt Quick UI form.
- Блоки Java Script не поддерживаются в форме Qt Quick UI.
+ JavaScript blocks are not supported in a Qt Quick UI form.
+ Блоки JavaScript не поддерживаются в форме Qt Quick UI.
Behavior type is not supported in a Qt Quick UI form.
@@ -28002,8 +28558,8 @@ Please build the qmldump application on the Qt version options page.
Допустимы только определения объектов Property, Method, Signal и Enum, а не «%1».
- Expected only name, prototype, defaultProperty, attachedType, exports isSingleton, isCreatable, isComposite and exportMetaObjectRevisions script bindings, not "%1".
- Допустимы только связки со скриптами name, prototype, defaultProperty, attachedType, exports и exportMetaObjectRevisions, а не «%1».
+ Expected only name, prototype, defaultProperty, attachedType, exports, isSingleton, isCreatable, isComposite and exportMetaObjectRevisions script bindings, not "%1".
+ Допустимы только связки со скриптами name, prototype, defaultProperty, attachedType, exports, isSingleton, isCreatable, isComposite и exportMetaObjectRevisions, но не «%1».
Expected only script bindings and object definitions.
@@ -28556,14 +29112,14 @@ Qt Creator know about a likely URI.
- QmlProfiler::Internal::PaintEventsModelProxy
+ QmlProfiler::Internal::QmlProfilerAnimationsModel
Animations
Анимации
GUI Thread
- Поток интерфейса
+ Поток GUI
Render Thread
@@ -28770,6 +29326,21 @@ references to elements in other files, loops, and so on.)
Профайлер QML (внешний)
+
+ QmlProfiler::Internal::QmlProfilerRangeModel
+
+ Duration
+ Продолжительность
+
+
+ Details
+ Подробнее
+
+
+ Location
+ Размещение
+
+
QmlProfiler::Internal::QmlProfilerRunControl
@@ -28802,6 +29373,10 @@ references to elements in other files, loops, and so on.)
No QML events recorded
События QML не записаны
+
+ Not supported for this application
+ Не поддерживается для этого приложения
+
Application stopped before loading all data
Приложение остановлено до загрузки всех данных
@@ -28837,6 +29412,14 @@ Do you want to continue?
Версия Qt настроенная для текущей конфигурации сборки слишком старая.
Продолжить?
+
+ Toggle the event search field.
+ Включение/выключения поля поиска событий.
+
+
+ Find events that have a specific note.
+ Поиск событий, имеющих особую отметку.
+
%1 s
%1 сек
@@ -28908,21 +29491,6 @@ Do you want to save the data first?
Временная шкала
-
- QmlProfiler::Internal::RangeTimelineModel
-
- Duration
- Продолжительность
-
-
- Details
- Подробнее
-
-
- Location
- Размещение
-
-
QmlProfiler::QV8ProfilerDataModel
@@ -31236,8 +31804,8 @@ Do you want to update it?
Не выбрана активная конфигурация установки
- Target Qt version (%1) might not support QML profiling. Cascades applications are not affected and should work as expected. For more info see http://qt-project.org/wiki/Qt-Creator-with-BlackBerry-10
- Целевая версия Qt (%1) может не поддерживать профилирование QML. Это не касается приложений Cascades, они должны работать. Подробности: http://qt-project.org/wiki/Qt-Creator-with-BlackBerry-10
+ Target Qt version (%1) might not support QML profiling. Cascades applications are not affected and should work as expected. For more info see http://wiki.qt.io/Qt_Creator_with_BlackBerry_10
+ Целевая версия Qt (%1) может не поддерживать профилирование QML. Это не касается приложений Cascades, они должны работать, как и раньше. Подробности: http://wiki.qt.io/Qt_Creator_with_BlackBerry_10
@@ -31590,14 +32158,6 @@ Are you sure you want to continue?
Qnx::Internal::QnxPlugin
-
- BAR descriptor file (BlackBerry)
- BAR-файл описания (BlackBerry)
-
-
- Could not add MIME type for bar-descriptor.xml editor.
- Не удалось добавить MIME-тип для редактора bar-descriptor.xml.
-
BAR Descriptor
Описание BAR
@@ -31681,10 +32241,6 @@ Are you sure you want to continue?
Target:
Цель:
-
- Add
- Добавить
-
Remove
Удалить
@@ -31711,6 +32267,10 @@ Are you sure you want to continue?
Удалить:
%1?
+
+ Add...
+ Добавить...
+
Qnx::Internal::QnxToolChainConfigWidget
@@ -32537,6 +33097,33 @@ cannot be found in the path.
Недопустимое имя функции
+
+ QuickFixFactory
+
+ Create Getter and Setter Member Functions
+ Создать методы получения и установки значения
+
+
+ Create Getter Member Function
+ Создать метод получения значения
+
+
+ Create Setter Member Function
+ Создать метод установки значения
+
+
+ Convert to Stack Variable
+ Преобразовать в стековую переменную
+
+
+ Convert to Pointer
+ Преобразовать в указатель
+
+
+ Generate Missing Q_PROPERTY Members...
+ Создание отсутствующих членов Q_PROPERTY...
+
+
RadioButtonSpecifics
@@ -32842,6 +33429,10 @@ cannot be found in the path.
You can enter lists and ranges like this: '1024,1026-1028,1030'.
Можно ввести списки и диапазоны, например: «1024,1026-1028,1030».
+
+ &Check host key
+ Проверять кл&юч хоста
+
RemoteLinux::GenericLinuxDeviceConfigurationWizard
@@ -33513,8 +34104,8 @@ In addition, device connectivity will be tested.
Открыть в редакторе
- Open in Text Editor
- Открыть в текстовом редакторе
+ Open With
+ Открыть с помощью
Copy path "%1"
@@ -33568,13 +34159,6 @@ In addition, device connectivity will be tested.
Скопировать путь до ресурса в буфер обмена
-
- ResourceEditor::Internal::ResourceFolderNode
-
- %1 Prefix: %2
- Префикс %1: %2
-
-
ResourceEditor::Internal::ResourceView
@@ -33586,13 +34170,6 @@ In addition, device connectivity will be tested.
Все файлы (*)
-
- ResourceEditor::ResourceTopLevelNode
-
- %1 Prefix: %2
- Префикс %1: %2
-
-
ResourceFile
@@ -33608,6 +34185,20 @@ In addition, device connectivity will be tested.
Отсутствует корневой элемент <RCC>.
+
+ ResourceTopLevelNode
+
+ %1 Prefix: %2
+ Префикс %1: %2
+
+
+
+ RowLabel
+
+ [unknown]
+ [неизвестная]
+
+
RowSpecifics
@@ -33862,6 +34453,10 @@ with a password, which you can enter below.
Expand
Развернуть
+
+ Add a new state.
+ Добавить новое состояние.
+
SubComponentManager::parseDirectory
@@ -33947,13 +34542,6 @@ with a password, which you can enter below.
Команда Subversion
-
- Subversion::Internal::SubversionDiffParameterWidget
-
- Ignore Whitespace
- Игнорировать пробелы
-
-
Subversion::Internal::SubversionEditorWidget
@@ -33961,6 +34549,17 @@ with a password, which you can enter below.
Аннотация ревизии «%1»
+
+ Subversion::Internal::SubversionLogParameterWidget
+
+ Verbose
+ Подробно
+
+
+ Show files changed in each revision
+ Показывать изменяемые файлы в каждой ревизии
+
+
Subversion::Internal::SubversionPlugin
@@ -34218,7 +34817,7 @@ with a password, which you can enter below.
Вкладки видны
- Determines the visibility of the the tab bar.
+ Determines the visibility of the tab bar.
Определяет, видна ли панель вкладок.
@@ -34377,6 +34976,10 @@ with a password, which you can enter below.
Searching
Идёт поиск
+
+ %1 occurrences replaced.
+ Произведено %1 замен(а).
+
List of comma separated wildcard filters
Список масок, разделённых запятой
@@ -34497,10 +35100,6 @@ Filter: %2
Director&y:
&Каталог:
-
- &Browse...
- &Обзор...
-
Fi&le pattern:
Ш&аблон:
@@ -35414,7 +36013,7 @@ Influences the indentation of continuation lines.
- TextEditor::Internal::TextEditorActionHandlerPrivate
+ TextEditor::Internal::TextEditorActionHandler
&Undo
&Отменить
@@ -35891,40 +36490,6 @@ Influences the indentation of continuation lines.
Размер шрифта в точках в текущем документе.
-
- TextEditor::Internal::TextEditorWidgetPrivate
-
- CTRL+D
- CTRL+D
-
-
- Line: %1, Col: %2
- Строка: %1, Столбец: %2
-
-
- Line: 9999, Col: 999
- Строка: 9999, Столбец: 999
-
-
-
- TextEditor::QuickFixFactory
-
- Create Getter and Setter Member Functions
- Создать методы получения и установки значения
-
-
- Convert to Stack Variable
- Преобразовать в стековую переменную
-
-
- Convert to Pointer
- Преобразовать в указатель
-
-
- Generate Missing Q_PROPERTY Members...
- Создание отсутствующих членов Q_PROPERTY...
-
-
TextEditor::TextDocument
@@ -36366,6 +36931,10 @@ Will not be applied to whitespace in comments and strings.
TextEditor::TextEditorWidget
+
+ CTRL+D
+ CTRL+D
+
Print Document
Печать документа
@@ -36394,6 +36963,14 @@ Will not be applied to whitespace in comments and strings.
Add UTF-8 BOM on Save
Добавить UTF-8 BOM при сохранении
+
+ Line: %1, Col: %2
+ Строка: %1, Столбец: %2
+
+
+ Line: 9999, Col: 999
+ Строка: 9999, Столбец: 999
+
TextFieldSpecifics
@@ -36700,6 +37277,10 @@ Will not be applied to whitespace in comments and strings.
Do not &ask again
&Больше не спрашивать
+
+ Do not &show again
+ Больше не п&оказывать
+
Utils::ClassNameValidatingLineEdit
@@ -37000,13 +37581,6 @@ Will not be applied to whitespace in comments and strings.
Размещение
-
- Utils::GlobalMacroExpander
-
- Access environment variables.
- Доступ к переменным среды.
-
-
Utils::LinearProgressWidget
@@ -37040,6 +37614,10 @@ Will not be applied to whitespace in comments and strings.
Global variables
Глобальные переменные
+
+ Access environment variables.
+ Доступ к переменным среды.
+
Utils::NewClassWidget
@@ -37544,10 +38122,6 @@ Will not be applied to whitespace in comments and strings.
Subversion Annotation Editor
Редактор аннотации Subversion
-
- Subversion Diff Editor
- Редактор изменений Subversion
-
Bazaar File Log Editor
Редактор журнала файлов Bazaar
@@ -37940,12 +38514,8 @@ Will not be applied to whitespace in comments and strings.
Журнал Callgrind (callgrind.out*);;Все файлы (*)
- Internal Error
- Внутренняя ошибка
-
-
- Failed to open file for reading: %1
- Не удалось открыть файл для чтения: %1
+ Callgrind: Failed to open file for reading: %1
+ Callgrind: Не удалось открыть файл для чтения: %1
Parsing Profile Data...
@@ -37954,10 +38524,6 @@ Will not be applied to whitespace in comments and strings.
Valgrind::Internal::MemcheckErrorView
-
- Copy Selection
- Копировать выбранное
-
Suppress Error
Игнорировать ошибку
@@ -38005,8 +38571,12 @@ Will not be applied to whitespace in comments and strings.
Загрузить внешний XML файл журнала
- Error occurred parsing Valgrind output: %1
- Ошибка при разборе вывода Valgrind: %1
+ Memcheck: Failed to open file for reading: %1
+ Memcheck: Не удалось открыть файл для чтения: %1
+
+
+ Memcheck: Error occurred parsing Valgrind output: %1
+ Memcheck: Ошибка при разборе вывода Valgrind: %1
Memory Issues
@@ -38040,14 +38610,6 @@ Will not be applied to whitespace in comments and strings.
XML Files (*.xml);;All Files (*)
Файлы XML (*.xml);;Все файлы (*)
-
- Internal Error
- Внутренняя ошибка
-
-
- Failed to open file for reading: %1
- Не удалось открыть файл для чтения: %1
-
Valgrind::Internal::SuppressionDialog
@@ -38246,17 +38808,27 @@ With cache simulation, further event counters are enabled:
Valgrind::Internal::ValgrindPlugin
- Valgrind Function Profile uses the "callgrind" tool to record function calls when a program runs.
- Профайлер функций Valgrind использует утилиту «callgrind» для записи вызовов функций при работе программы.
+ Valgrind Function Profile uses the Callgrind tool to record function calls when a program runs.
+ Профайлер функций Valgrind использует утилиту Callgrind для записи вызовов функций при работе программы.
- Valgrind Analyze Memory uses the "memcheck" tool to find memory leaks.
- Анализатор памяти Valgrind использует утилиту «memcheck» для обнаружения утечек памяти.
+ Valgrind Analyze Memory uses the Memcheck tool to find memory leaks.
+ Анализатор памяти Valgrind использует утилиту Memcheck для обнаружения утечек памяти.
+
+
+ Valgrind Analyze Memory with GDB uses the Memcheck tool to find memory leaks.
+When a problem is detected, the application is interrupted and can be debugged.
+ Анализатор памяти Valgrind с GDB использует утилиту Memcheck для поиска утечек памяти.
+При обнаружении проблем программа останавливается для отладки.
Valgrind Memory Analyzer
Анализатор памяти Valgrind
+
+ Valgrind Memory Analyzer with GDB
+ Анализатор памяти Valgrind с GDB
+
Valgrind Function Profiler
Профайлер функций Valgrind
@@ -38840,8 +39412,8 @@ should a repository require SSH-authentication (see documentation on SSH and the
Копировать «%1»
- Describe Change %1
- Описать изменение %1
+ &Describe Change %1
+ &Описать изменение %1
Send to CodePaster...
@@ -38983,10 +39555,24 @@ should a repository require SSH-authentication (see documentation on SSH and the
Configuration
Настройка
+
+ No version control set on "VcsConfiguration" page.
+ Do not translate "VcsConfiguration", because it is the id of a page.
+ Контроль версий не задан на странице «VcsConfiguration».
+
+
+ "vcsId" ("%1") is invalid for "VcsConfiguration" page. Possible values are: %2.
+ Do not translate "VcsConfiguration", because it is the id of a page.
+ «vcsId» («%1») неверен для страницы «VcsConfiguration». Допустимы значения: %2.
+
Please configure <b>%1</b> now.
Настройте <b>%1</b> прямо сейчас.
+
+ No known version control selected.
+ Ни одна известная система контроля версий не выбрана.
+
VcsBase::VcsOutputWindow
diff --git a/share/qtcreator/welcomescreen/qtcreator_tutorials.xml b/share/qtcreator/welcomescreen/qtcreator_tutorials.xml
index ef5c5e39cb4..cc4ad211a96 100644
--- a/share/qtcreator/welcomescreen/qtcreator_tutorials.xml
+++ b/share/qtcreator/welcomescreen/qtcreator_tutorials.xml
@@ -25,7 +25,7 @@
qt quick,qml,c++
-
+
qt creator
@@ -57,16 +57,16 @@
qt,winrt
-
-
- qt, embedded
+
+
+ qt, embedded, device creation,prototype
-
-
+
+
qt quick,controls
-
+
qt quick,layouts,bindings
@@ -75,51 +75,51 @@
- qt quick,qml,3d
+ qt quick,qml,3d,opengl
-
-
- qt quick,qt,scenegraph,3d
+
+
+ qt quick, qt canvas 3d,webgl
-
-
- qt,qml,data types
+
+
+ qt,qml engine
qt quick,qml,c++,build,compile,input,styling
-
-
- qt quick,qml,network
+
+
+ qt quick,widgets
-
-
- qt,web engine
+
+
+ qt web engine
-
+
qml,qt quick,web
-
-
- qt,signals,slots
+
+
+ qt quick,qt creator,qml profiler
-
-
- qt,add-ons,compression,plotting,configuration
+
+
+ qt,3d
-
-
- qt,data types
+
+
+ qt,qml,prototype
-
-
+
+
qt quick,qml,qt creator,qml profiler,embedded
-
-
- qt quick,qml,automotive
+
+
+ qt,qml,c++,embedded
diff --git a/share/qtcreator/welcomescreen/widgets/images/icons/ddays12.png b/share/qtcreator/welcomescreen/widgets/images/icons/ddays12.png
deleted file mode 100644
index cb2e3580de8..00000000000
Binary files a/share/qtcreator/welcomescreen/widgets/images/icons/ddays12.png and /dev/null differ
diff --git a/share/qtcreator/welcomescreen/widgets/images/icons/ddays13.png b/share/qtcreator/welcomescreen/widgets/images/icons/ddays13.png
index 20612fbf10b..db9c1761e40 100644
Binary files a/share/qtcreator/welcomescreen/widgets/images/icons/ddays13.png and b/share/qtcreator/welcomescreen/widgets/images/icons/ddays13.png differ
diff --git a/share/qtcreator/welcomescreen/widgets/images/icons/ddays14.png b/share/qtcreator/welcomescreen/widgets/images/icons/ddays14.png
new file mode 100644
index 00000000000..3d9d8d66187
Binary files /dev/null and b/share/qtcreator/welcomescreen/widgets/images/icons/ddays14.png differ
diff --git a/src/app/main.cpp b/src/app/main.cpp
index 918491f0c25..7092c897208 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -496,12 +496,6 @@ int main(int argc, char **argv)
displayError(msgCoreLoadFailure(coreplugin->errorString()));
return 1;
}
- if (PluginManager::hasError()) {
- PluginErrorOverview *errorOverview = new PluginErrorOverview(QApplication::activeWindow());
- errorOverview->setAttribute(Qt::WA_DeleteOnClose);
- errorOverview->setModal(true);
- errorOverview->show();
- }
// Set up remote arguments.
QObject::connect(&app, SIGNAL(messageReceived(QString,QObject*)),
diff --git a/src/libs/ssh/sshchannelmanager.cpp b/src/libs/ssh/sshchannelmanager.cpp
index 50d20518be5..2a198a43fb8 100644
--- a/src/libs/ssh/sshchannelmanager.cpp
+++ b/src/libs/ssh/sshchannelmanager.cpp
@@ -170,11 +170,11 @@ QSsh::SftpChannel::Ptr SshChannelManager::createSftpChannel()
return sftp;
}
-SshDirectTcpIpTunnel::Ptr SshChannelManager::createTunnel(quint16 remotePort,
- const SshConnectionInfo &connectionInfo)
+SshDirectTcpIpTunnel::Ptr SshChannelManager::createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort)
{
- SshDirectTcpIpTunnel::Ptr tunnel(new SshDirectTcpIpTunnel(m_nextLocalChannelId++, remotePort,
- connectionInfo, m_sendFacility));
+ SshDirectTcpIpTunnel::Ptr tunnel(new SshDirectTcpIpTunnel(m_nextLocalChannelId++,
+ originatingHost, originatingPort, remoteHost, remotePort, m_sendFacility));
insertChannel(tunnel->d, tunnel);
return tunnel;
}
diff --git a/src/libs/ssh/sshchannelmanager_p.h b/src/libs/ssh/sshchannelmanager_p.h
index 636fa218cde..0763e3f7a07 100644
--- a/src/libs/ssh/sshchannelmanager_p.h
+++ b/src/libs/ssh/sshchannelmanager_p.h
@@ -37,7 +37,6 @@
namespace QSsh {
class SftpChannel;
-class SshConnectionInfo;
class SshDirectTcpIpTunnel;
class SshRemoteProcess;
@@ -56,8 +55,8 @@ public:
QSharedPointer createRemoteProcess(const QByteArray &command);
QSharedPointer createRemoteShell();
QSharedPointer createSftpChannel();
- QSharedPointer createTunnel(quint16 remotePort,
- const SshConnectionInfo &connectionInfo);
+ QSharedPointer createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort);
int channelCount() const;
enum CloseAllMode { CloseAllRegular, CloseAllAndReset };
diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp
index d86cc562e2f..9a3cd8eb2f0 100644
--- a/src/libs/ssh/sshconnection.cpp
+++ b/src/libs/ssh/sshconnection.cpp
@@ -184,10 +184,11 @@ QSharedPointer SshConnection::createSftpChannel()
return d->createSftpChannel();
}
-SshDirectTcpIpTunnel::Ptr SshConnection::createTunnel(quint16 remotePort)
+SshDirectTcpIpTunnel::Ptr SshConnection::createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort)
{
QSSH_ASSERT_AND_RETURN_VALUE(state() == Connected, SshDirectTcpIpTunnel::Ptr());
- return d->createTunnel(remotePort);
+ return d->createTunnel(originatingHost, originatingPort, remoteHost, remotePort);
}
int SshConnection::closeAllChannels()
@@ -828,9 +829,10 @@ QSharedPointer SshConnectionPrivate::createSftpChannel()
return m_channelManager->createSftpChannel();
}
-SshDirectTcpIpTunnel::Ptr SshConnectionPrivate::createTunnel(quint16 remotePort)
+SshDirectTcpIpTunnel::Ptr SshConnectionPrivate::createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort)
{
- return m_channelManager->createTunnel(remotePort, m_conn->connectionInfo());
+ return m_channelManager->createTunnel(originatingHost, originatingPort, remoteHost, remotePort);
}
const quint64 SshConnectionPrivate::InvalidSeqNr = static_cast(-1);
diff --git a/src/libs/ssh/sshconnection.h b/src/libs/ssh/sshconnection.h
index db08eb34336..3d8f355eff6 100644
--- a/src/libs/ssh/sshconnection.h
+++ b/src/libs/ssh/sshconnection.h
@@ -127,7 +127,8 @@ public:
QSharedPointer createRemoteProcess(const QByteArray &command);
QSharedPointer createRemoteShell();
QSharedPointer createSftpChannel();
- QSharedPointer createTunnel(quint16 remotePort);
+ QSharedPointer createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort);
// -1 if an error occurred, number of channels closed otherwise.
int closeAllChannels();
diff --git a/src/libs/ssh/sshconnection_p.h b/src/libs/ssh/sshconnection_p.h
index 31c20fbc997..8e73df838a6 100644
--- a/src/libs/ssh/sshconnection_p.h
+++ b/src/libs/ssh/sshconnection_p.h
@@ -89,7 +89,8 @@ public:
QSharedPointer createRemoteProcess(const QByteArray &command);
QSharedPointer createRemoteShell();
QSharedPointer createSftpChannel();
- QSharedPointer createTunnel(quint16 remotePort);
+ QSharedPointer createTunnel(const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort);
SshStateInternal state() const { return m_state; }
SshError error() const { return m_error; }
diff --git a/src/libs/ssh/sshdirecttcpiptunnel.cpp b/src/libs/ssh/sshdirecttcpiptunnel.cpp
index 57277233e29..8f7be398476 100644
--- a/src/libs/ssh/sshdirecttcpiptunnel.cpp
+++ b/src/libs/ssh/sshdirecttcpiptunnel.cpp
@@ -38,11 +38,14 @@
namespace QSsh {
namespace Internal {
-SshDirectTcpIpTunnelPrivate::SshDirectTcpIpTunnelPrivate(quint32 channelId, quint16 remotePort,
- const SshConnectionInfo &connectionInfo, SshSendFacility &sendFacility)
+SshDirectTcpIpTunnelPrivate::SshDirectTcpIpTunnelPrivate(quint32 channelId,
+ const QString &originatingHost, quint16 originatingPort, const QString &remoteHost,
+ quint16 remotePort, SshSendFacility &sendFacility)
: AbstractSshChannel(channelId, sendFacility),
- m_remotePort(remotePort),
- m_connectionInfo(connectionInfo)
+ m_originatingHost(originatingHost),
+ m_originatingPort(originatingPort),
+ m_remoteHost(remoteHost),
+ m_remotePort(remotePort)
{
connect(this, SIGNAL(eof()), SLOT(handleEof()));
}
@@ -112,9 +115,11 @@ void SshDirectTcpIpTunnelPrivate::handleEof()
using namespace Internal;
-SshDirectTcpIpTunnel::SshDirectTcpIpTunnel(quint32 channelId, quint16 remotePort,
- const SshConnectionInfo &connectionInfo, SshSendFacility &sendFacility)
- : d(new SshDirectTcpIpTunnelPrivate(channelId, remotePort, connectionInfo, sendFacility))
+SshDirectTcpIpTunnel::SshDirectTcpIpTunnel(quint32 channelId, const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort,
+ SshSendFacility &sendFacility)
+ : d(new SshDirectTcpIpTunnelPrivate(channelId, originatingHost, originatingPort, remoteHost,
+ remotePort, sendFacility))
{
connect(d, SIGNAL(initialized()), SIGNAL(initialized()), Qt::QueuedConnection);
connect(d, SIGNAL(readyRead()), SIGNAL(readyRead()), Qt::QueuedConnection);
@@ -156,9 +161,8 @@ void SshDirectTcpIpTunnel::initialize()
try {
QIODevice::open(QIODevice::ReadWrite);
d->m_sendFacility.sendDirectTcpIpPacket(d->localChannelId(), d->initialWindowSize(),
- d->maxPacketSize(), d->m_connectionInfo.peerAddress.toString().toUtf8(),
- d->m_remotePort, d->m_connectionInfo.localAddress.toString().toUtf8(),
- d->m_connectionInfo.localPort);
+ d->maxPacketSize(), d->m_remoteHost.toUtf8(), d->m_remotePort,
+ d->m_originatingHost.toUtf8(), d->m_originatingPort);
d->setChannelState(AbstractSshChannel::SessionRequested);
d->m_timeoutTimer.start(d->ReplyTimeout);
} catch (const Botan::Exception &e) { // Won't happen, but let's play it safe.
diff --git a/src/libs/ssh/sshdirecttcpiptunnel.h b/src/libs/ssh/sshdirecttcpiptunnel.h
index 4ee86d66e60..5c3f5e1c1cc 100644
--- a/src/libs/ssh/sshdirecttcpiptunnel.h
+++ b/src/libs/ssh/sshdirecttcpiptunnel.h
@@ -37,7 +37,6 @@
#include
namespace QSsh {
-class SshConnectionInfo;
namespace Internal {
class SshChannelManager;
@@ -71,8 +70,9 @@ signals:
void tunnelClosed();
private:
- SshDirectTcpIpTunnel(quint32 channelId, quint16 remotePort,
- const SshConnectionInfo &connectionInfo, Internal::SshSendFacility &sendFacility);
+ SshDirectTcpIpTunnel(quint32 channelId, const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort,
+ Internal::SshSendFacility &sendFacility);
// QIODevice stuff
qint64 readData(char *data, qint64 maxlen);
diff --git a/src/libs/ssh/sshdirecttcpiptunnel_p.h b/src/libs/ssh/sshdirecttcpiptunnel_p.h
index bf77097e60d..17e9162d1e5 100644
--- a/src/libs/ssh/sshdirecttcpiptunnel_p.h
+++ b/src/libs/ssh/sshdirecttcpiptunnel_p.h
@@ -32,8 +32,6 @@
#include "sshchannel_p.h"
-#include "sshconnection.h"
-
namespace QSsh {
class SshDirectTcpIpTunnel;
@@ -46,8 +44,9 @@ class SshDirectTcpIpTunnelPrivate : public AbstractSshChannel
friend class QSsh::SshDirectTcpIpTunnel;
public:
- explicit SshDirectTcpIpTunnelPrivate(quint32 channelId, quint16 remotePort,
- const SshConnectionInfo &connectionInfo, SshSendFacility &sendFacility);
+ explicit SshDirectTcpIpTunnelPrivate(quint32 channelId, const QString &originatingHost,
+ quint16 originatingPort, const QString &remoteHost, quint16 remotePort,
+ SshSendFacility &sendFacility);
signals:
void initialized();
@@ -71,8 +70,10 @@ private:
void closeHook();
+ const QString m_originatingHost;
+ const quint16 m_originatingPort;
+ const QString m_remoteHost;
const quint16 m_remotePort;
- const SshConnectionInfo m_connectionInfo;
QByteArray m_data;
};
diff --git a/src/libs/timeline/qml/MainView.qml b/src/libs/timeline/qml/MainView.qml
index b0d964e5335..93f132067a8 100644
--- a/src/libs/timeline/qml/MainView.qml
+++ b/src/libs/timeline/qml/MainView.qml
@@ -30,6 +30,7 @@
import QtQuick 2.1
import QtQuick.Controls 1.0
+import QtQuick.Controls.Styles 1.0
Rectangle {
id: root
@@ -186,7 +187,7 @@ Rectangle {
ButtonsBar {
id: buttonsBar
- enabled: timelineModelAggregator.height > 0
+ enabled: zoomControl.traceDuration > 0
anchors.top: parent.top
anchors.left: parent.left
width: 150
@@ -397,10 +398,25 @@ Rectangle {
anchors.right: filterMenu.right
height: buttonsBar.height
y: index * height
- text: modelData.displayName
enabled: !modelData.empty
- checked: !modelData.empty && !modelData.hidden
+ checked: true
onCheckedChanged: modelData.hidden = !checked
+
+ style: CheckBoxStyle {
+ label: Text {
+ width: filterMenu.width - implicitHeight * 1.5
+ color: control.enabled ? "black" : "#808080"
+ text: modelData.displayName
+ textFormat: Text.PlainText
+ elide: Text.ElideRight
+ renderType: Text.NativeRendering
+ }
+ }
+
+ Connections {
+ target: modelData
+ onEmptyChanged: checked = true
+ }
}
}
diff --git a/src/libs/timeline/qml/TimelineLabels.qml b/src/libs/timeline/qml/TimelineLabels.qml
index 604658572bf..ba3f883a420 100644
--- a/src/libs/timeline/qml/TimelineLabels.qml
+++ b/src/libs/timeline/qml/TimelineLabels.qml
@@ -79,8 +79,8 @@ Flickable {
id: loader
asynchronous: y < categories.contentY + categories.height &&
y + height > categories.contentY
- active: modelData !== null &&
- (modelProxy.height === 0 || (!modelData.hidden && !modelData.empty))
+ active: modelData !== null && zoomer !== null &&
+ (zoomer.traceDuration <= 0 || (!modelData.hidden && !modelData.empty))
height: active ? Math.max(modelData.height, modelData.defaultRowHeight) : 0
width: categories.width
property int visualIndex: DelegateModel.itemsIndex
diff --git a/src/libs/timeline/timelineabstractrenderer.cpp b/src/libs/timeline/timelineabstractrenderer.cpp
index 80d9594ad83..b30a77dd183 100644
--- a/src/libs/timeline/timelineabstractrenderer.cpp
+++ b/src/libs/timeline/timelineabstractrenderer.cpp
@@ -38,6 +38,11 @@ TimelineAbstractRenderer::TimelineAbstractRendererPrivate::TimelineAbstractRende
{
}
+TimelineAbstractRenderer::TimelineAbstractRendererPrivate::~TimelineAbstractRendererPrivate()
+{
+ // Nothing to delete here as all the pointer members are owned by other classes.
+}
+
TimelineAbstractRenderer::TimelineAbstractRenderer(TimelineAbstractRendererPrivate &dd,
QQuickItem *parent) :
QQuickItem(parent), d_ptr(&dd)
@@ -67,6 +72,12 @@ TimelineAbstractRenderer::TimelineAbstractRenderer(QQuickItem *parent) : QQuickI
setFlag(ItemHasContents);
}
+TimelineAbstractRenderer::~TimelineAbstractRenderer()
+{
+ Q_D(TimelineAbstractRenderer);
+ delete d;
+}
+
bool TimelineAbstractRenderer::selectionLocked() const
{
Q_D(const TimelineAbstractRenderer);
diff --git a/src/libs/timeline/timelineabstractrenderer.h b/src/libs/timeline/timelineabstractrenderer.h
index 50a9a21ad7d..8ecf8650de7 100644
--- a/src/libs/timeline/timelineabstractrenderer.h
+++ b/src/libs/timeline/timelineabstractrenderer.h
@@ -55,6 +55,7 @@ class TIMELINE_EXPORT TimelineAbstractRenderer : public QQuickItem
public:
TimelineAbstractRenderer(QQuickItem *parent = 0);
+ ~TimelineAbstractRenderer();
bool selectionLocked() const;
int selectedItem() const;
diff --git a/src/libs/timeline/timelineabstractrenderer_p.h b/src/libs/timeline/timelineabstractrenderer_p.h
index b29fce55672..5a7af299a47 100644
--- a/src/libs/timeline/timelineabstractrenderer_p.h
+++ b/src/libs/timeline/timelineabstractrenderer_p.h
@@ -38,6 +38,7 @@ namespace Timeline {
class TIMELINE_EXPORT TimelineAbstractRenderer::TimelineAbstractRendererPrivate {
public:
TimelineAbstractRendererPrivate();
+ virtual ~TimelineAbstractRendererPrivate();
int selectedItem;
bool selectionLocked;
diff --git a/src/libs/timeline/timelinemodel.cpp b/src/libs/timeline/timelinemodel.cpp
index 099492114c2..2b1d7d50cc1 100644
--- a/src/libs/timeline/timelinemodel.cpp
+++ b/src/libs/timeline/timelinemodel.cpp
@@ -136,6 +136,8 @@ void TimelineModel::setExpandedRowCount(int rows)
{
Q_D(TimelineModel);
if (d->expandedRowCount != rows) {
+ if (d->rowOffsets.length() > rows)
+ d->rowOffsets.resize(rows);
d->expandedRowCount = rows;
emit expandedRowCountChanged();
if (d->expanded)
diff --git a/src/libs/timeline/timelinemodelaggregator.cpp b/src/libs/timeline/timelinemodelaggregator.cpp
index 1311f60fb62..bad5462fc5e 100644
--- a/src/libs/timeline/timelinemodelaggregator.cpp
+++ b/src/libs/timeline/timelinemodelaggregator.cpp
@@ -139,10 +139,13 @@ QVariantMap TimelineModelAggregator::nextItem(int selectedModel, int selectedIte
if (selectedModel == i) {
itemIndexes[i] = (selectedItem + 1) % currentModel->count();
} else {
- if (currentModel->startTime(0) > time)
+ if (currentModel->startTime(0) >= time)
itemIndexes[i] = 0;
else
itemIndexes[i] = (currentModel->lastIndex(time) + 1) % currentModel->count();
+
+ if (i < selectedModel && currentModel->startTime(itemIndexes[i]) == time)
+ itemIndexes[i] = (itemIndexes[i] + 1) % currentModel->count();
}
} else {
itemIndexes[i] = -1;
@@ -155,7 +158,8 @@ QVariantMap TimelineModelAggregator::nextItem(int selectedModel, int selectedIte
if (itemIndexes[i] == -1)
continue;
qint64 newStartTime = model(i)->startTime(itemIndexes[i]);
- if (newStartTime > time && newStartTime < candidateStartTime) {
+ if (newStartTime < candidateStartTime &&
+ (newStartTime > time || (newStartTime == time && i > selectedModel))) {
candidateStartTime = newStartTime;
candidateModelIndex = i;
}
@@ -191,23 +195,29 @@ QVariantMap TimelineModelAggregator::prevItem(int selectedModel, int selectedIte
QVarLengthArray itemIndexes(modelCount());
for (int i = 0; i < modelCount(); i++) {
+ const TimelineModel *currentModel = model(i);
if (selectedModel == i) {
- itemIndexes[i] = selectedItem - 1;
- if (itemIndexes[i] < 0)
- itemIndexes[i] = model(selectedModel)->count() -1;
+ itemIndexes[i] = (selectedItem == 0 ? currentModel->count() : selectedItem) - 1;
+ } else {
+ itemIndexes[i] = currentModel->lastIndex(time);
+ if (itemIndexes[i] == -1)
+ itemIndexes[i] = currentModel->count() - 1;
+ else if (i < selectedModel && itemIndexes[i] + 1 < currentModel->count() &&
+ currentModel->startTime(itemIndexes[i] + 1) == time) {
+ ++itemIndexes[i];
+ }
}
- else
- itemIndexes[i] = model(i)->lastIndex(time);
}
int candidateModelIndex = -1;
qint64 candidateStartTime = std::numeric_limits::min();
- for (int i = 0; i < modelCount(); i++) {
+ for (int i = modelCount() - 1; i >= 0 ; --i) {
const TimelineModel *currentModel = model(i);
if (itemIndexes[i] == -1 || itemIndexes[i] >= currentModel->count())
continue;
qint64 newStartTime = currentModel->startTime(itemIndexes[i]);
- if (newStartTime < time && newStartTime > candidateStartTime) {
+ if (newStartTime > candidateStartTime &&
+ (newStartTime < time || (newStartTime == time && i < selectedModel))) {
candidateStartTime = newStartTime;
candidateModelIndex = i;
}
diff --git a/src/libs/timeline/timelineoverviewrenderer.cpp b/src/libs/timeline/timelineoverviewrenderer.cpp
index 69326667adc..765e346ef6f 100644
--- a/src/libs/timeline/timelineoverviewrenderer.cpp
+++ b/src/libs/timeline/timelineoverviewrenderer.cpp
@@ -36,15 +36,16 @@ namespace Timeline {
TimelineOverviewRenderer::TimelineOverviewRenderer(QQuickItem *parent) :
TimelineAbstractRenderer(*(new TimelineOverviewRendererPrivate), parent)
{
- Q_D(TimelineOverviewRenderer);
- d->renderState = 0;
}
-TimelineOverviewRenderer::~TimelineOverviewRenderer()
+TimelineOverviewRenderer::TimelineOverviewRendererPrivate::TimelineOverviewRendererPrivate() :
+ renderState(0)
{
- Q_D(TimelineOverviewRenderer);
- delete d->renderState;
- delete d;
+}
+
+TimelineOverviewRenderer::TimelineOverviewRendererPrivate::~TimelineOverviewRendererPrivate()
+{
+ delete renderState;
}
QSGNode *TimelineOverviewRenderer::updatePaintNode(QSGNode *oldNode,
diff --git a/src/libs/timeline/timelineoverviewrenderer.h b/src/libs/timeline/timelineoverviewrenderer.h
index 1c4710734b6..e2635a3da24 100644
--- a/src/libs/timeline/timelineoverviewrenderer.h
+++ b/src/libs/timeline/timelineoverviewrenderer.h
@@ -39,7 +39,6 @@ class TIMELINE_EXPORT TimelineOverviewRenderer : public TimelineAbstractRenderer
{
public:
TimelineOverviewRenderer(QQuickItem *parent = 0);
- ~TimelineOverviewRenderer();
protected:
virtual QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updatePaintNodeData);
diff --git a/src/libs/timeline/timelineoverviewrenderer_p.h b/src/libs/timeline/timelineoverviewrenderer_p.h
index afeac5d6a2c..0c13457b31e 100644
--- a/src/libs/timeline/timelineoverviewrenderer_p.h
+++ b/src/libs/timeline/timelineoverviewrenderer_p.h
@@ -40,6 +40,9 @@ class TimelineOverviewRenderer::TimelineOverviewRendererPrivate :
public TimelineAbstractRenderer::TimelineAbstractRendererPrivate
{
public:
+ TimelineOverviewRendererPrivate();
+ ~TimelineOverviewRendererPrivate();
+
TimelineRenderState *renderState;
};
diff --git a/src/libs/timeline/timelinerenderer.cpp b/src/libs/timeline/timelinerenderer.cpp
index 398d1d3dccd..48690c6a9f5 100644
--- a/src/libs/timeline/timelinerenderer.cpp
+++ b/src/libs/timeline/timelinerenderer.cpp
@@ -54,6 +54,19 @@ TimelineRenderer::TimelineRendererPrivate::TimelineRendererPrivate(TimelineRende
resetCurrentSelection();
}
+TimelineRenderer::TimelineRendererPrivate::~TimelineRendererPrivate()
+{
+ clear();
+}
+
+void TimelineRenderer::TimelineRendererPrivate::clear()
+{
+ for (auto i = renderStates.begin(); i != renderStates.end(); ++i)
+ qDeleteAll(*i);
+ renderStates.clear();
+ lastState = 0;
+}
+
TimelineRenderer::TimelineRenderer(QQuickItem *parent) :
TimelineAbstractRenderer(*(new TimelineRendererPrivate(this)), parent)
{
@@ -110,7 +123,7 @@ QSGNode *TimelineRenderer::updatePaintNode(QSGNode *node, UpdatePaintNodeData *u
Q_D(TimelineRenderer);
Q_UNUSED(updatePaintNodeData)
- if (!d->model || d->model->hidden() || d->model->isEmpty() ||
+ if (!d->model || d->model->hidden() || d->model->isEmpty() || !d->zoomer ||
d->zoomer->windowDuration() <= 0) {
delete node;
return 0;
@@ -121,10 +134,7 @@ QSGNode *TimelineRenderer::updatePaintNode(QSGNode *node, UpdatePaintNodeData *u
if (d->modelDirty) {
if (node)
node->removeAllChildNodes();
- for (auto i = d->renderStates.begin(); i != d->renderStates.end(); ++i)
- qDeleteAll(*i);
- d->renderStates.clear();
- d->lastState = 0;
+ d->clear();
}
TimelineRenderState *state = d->findRenderState();
@@ -181,7 +191,7 @@ void TimelineRenderer::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(TimelineRenderer);
Q_UNUSED(event);
- if (!d->model->isEmpty())
+ if (d->model && !d->model->isEmpty())
d->manageClicked();
}
@@ -222,6 +232,9 @@ void TimelineRenderer::TimelineRendererPrivate::manageClicked()
void TimelineRenderer::TimelineRendererPrivate::manageHovered(int mouseX, int mouseY)
{
Q_Q(TimelineRenderer);
+ if (!zoomer || !model || q->width() < 1)
+ return;
+
qint64 duration = zoomer->windowDuration();
if (duration <= 0)
return;
diff --git a/src/libs/timeline/timelinerenderer_p.h b/src/libs/timeline/timelinerenderer_p.h
index 807e6822a9b..c6d79549178 100644
--- a/src/libs/timeline/timelinerenderer_p.h
+++ b/src/libs/timeline/timelinerenderer_p.h
@@ -40,6 +40,9 @@ class TimelineRenderer::TimelineRendererPrivate :
TimelineAbstractRenderer::TimelineAbstractRendererPrivate {
public:
TimelineRendererPrivate(TimelineRenderer *q);
+ ~TimelineRendererPrivate();
+
+ void clear();
int rowFromPosition(int y) const;
diff --git a/src/plugins/bookmarks/bookmark.cpp b/src/plugins/bookmarks/bookmark.cpp
index adeff82903f..29c4d833280 100644
--- a/src/plugins/bookmarks/bookmark.cpp
+++ b/src/plugins/bookmarks/bookmark.cpp
@@ -47,7 +47,7 @@ Bookmark::Bookmark(int lineNumber, BookmarkManager *manager) :
void Bookmark::removedFromEditor()
{
- m_manager->removeBookmark(this);
+ m_manager->deleteBookmark(this);
}
void Bookmark::updateLineNumber(int line)
@@ -76,8 +76,9 @@ void Bookmark::updateBlock(const QTextBlock &block)
void Bookmark::updateFileName(const QString &fileName)
{
+ const QString &oldFileName = this->fileName();
TextMark::updateFileName(fileName);
- m_manager->updateBookmark(this);
+ m_manager->updateBookmarkFileName(this, oldFileName);
}
void Bookmark::setNote(const QString ¬e)
diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp
index 17936c7f10d..e4de592623c 100644
--- a/src/plugins/bookmarks/bookmarkmanager.cpp
+++ b/src/plugins/bookmarks/bookmarkmanager.cpp
@@ -280,7 +280,7 @@ void BookmarkView::removeFromContextMenu()
void BookmarkView::removeBookmark(const QModelIndex& index)
{
Bookmark *bm = m_manager->bookmarkForIndex(index);
- m_manager->removeBookmark(bm);
+ m_manager->deleteBookmark(bm);
}
void BookmarkView::keyPressEvent(QKeyEvent *event)
@@ -313,7 +313,7 @@ void BookmarkView::gotoBookmark(const QModelIndex &index)
{
Bookmark *bk = m_manager->bookmarkForIndex(index);
if (!m_manager->gotoBookmark(bk))
- m_manager->removeBookmark(bk);
+ m_manager->deleteBookmark(bk);
}
////
@@ -449,7 +449,7 @@ void BookmarkManager::toggleBookmark(const QString &fileName, int lineNumber)
// Remove any existing bookmark on this line
if (Bookmark *mark = findBookmark(fileName, lineNumber)) {
// TODO check if the bookmark is really on the same markable Interface
- removeBookmark(mark);
+ deleteBookmark(mark);
return;
}
@@ -469,6 +469,17 @@ void BookmarkManager::updateBookmark(Bookmark *bookmark)
saveBookmarks();
}
+void BookmarkManager::updateBookmarkFileName(Bookmark *bookmark, const QString &oldFileName)
+{
+ if (oldFileName == bookmark->fileName())
+ return;
+
+ if (removeBookmarkFromMap(bookmark, oldFileName))
+ addBookmarkToMap(bookmark);
+
+ updateBookmark(bookmark);
+}
+
void BookmarkManager::removeAllBookmarks()
{
if (m_bookmarksList.isEmpty())
@@ -492,28 +503,35 @@ void BookmarkManager::removeAllBookmarks()
endRemoveRows();
}
-void BookmarkManager::removeBookmark(Bookmark *bookmark)
+bool BookmarkManager::removeBookmarkFromMap(Bookmark *bookmark, const QString &fileName)
+{
+ bool found = false;
+ const QFileInfo fi(fileName.isEmpty() ? bookmark->fileName() : fileName);
+ if (FileNameBookmarksMap *files = m_bookmarksMap.value(fi.path())) {
+ FileNameBookmarksMap::iterator i = files->begin();
+ while (i != files->end()) {
+ if (i.value() == bookmark) {
+ files->erase(i);
+ found = true;
+ break;
+ }
+ ++i;
+ }
+ if (files->count() <= 0) {
+ m_bookmarksMap.remove(fi.path());
+ delete files;
+ }
+ }
+ return found;
+}
+
+void BookmarkManager::deleteBookmark(Bookmark *bookmark)
{
int idx = m_bookmarksList.indexOf(bookmark);
beginRemoveRows(QModelIndex(), idx, idx);
- const QFileInfo fi(bookmark->fileName());
- FileNameBookmarksMap *files = m_bookmarksMap.value(fi.path());
-
- FileNameBookmarksMap::iterator i = files->begin();
- while (i != files->end()) {
- if (i.value() == bookmark) {
- files->erase(i);
- delete bookmark;
- break;
- }
- ++i;
- }
- if (files->count() <= 0) {
- m_bookmarksMap.remove(fi.path());
- delete files;
- }
-
+ removeBookmarkFromMap(bookmark);
+ delete bookmark;
m_bookmarksList.removeAt(idx);
endRemoveRows();
@@ -609,7 +627,7 @@ void BookmarkManager::next()
selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
return;
}
- removeBookmark(bk);
+ deleteBookmark(bk);
if (m_bookmarksList.isEmpty()) // No bookmarks anymore ...
return;
}
@@ -632,7 +650,7 @@ void BookmarkManager::prev()
selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
return;
}
- removeBookmark(bk);
+ deleteBookmark(bk);
if (m_bookmarksList.isEmpty())
return;
}
@@ -756,6 +774,15 @@ Bookmark *BookmarkManager::findBookmark(const QString &filePath, int lineNumber)
return 0;
}
+void BookmarkManager::addBookmarkToMap(Bookmark *bookmark)
+{
+ const QFileInfo fi(bookmark->fileName());
+ const QString &path = fi.path();
+ if (!m_bookmarksMap.contains(path))
+ m_bookmarksMap.insert(path, new FileNameBookmarksMap());
+ m_bookmarksMap.value(path)->insert(fi.fileName(), bookmark);
+}
+
/* Adds a bookmark to the internal data structures. The 'userset' parameter
* determines whether action status should be updated and whether the bookmarks
* should be saved to the session settings.
@@ -763,12 +790,8 @@ Bookmark *BookmarkManager::findBookmark(const QString &filePath, int lineNumber)
void BookmarkManager::addBookmark(Bookmark *bookmark, bool userset)
{
beginInsertRows(QModelIndex(), m_bookmarksList.size(), m_bookmarksList.size());
- const QFileInfo fi(bookmark->fileName());
- const QString &path = fi.path();
- if (!m_bookmarksMap.contains(path))
- m_bookmarksMap.insert(path, new FileNameBookmarksMap());
- m_bookmarksMap.value(path)->insert(fi.fileName(), bookmark);
+ addBookmarkToMap(bookmark);
m_bookmarksList.append(bookmark);
diff --git a/src/plugins/bookmarks/bookmarkmanager.h b/src/plugins/bookmarks/bookmarkmanager.h
index a2e1d1d7e6a..a86413b758f 100644
--- a/src/plugins/bookmarks/bookmarkmanager.h
+++ b/src/plugins/bookmarks/bookmarkmanager.h
@@ -60,7 +60,8 @@ public:
QIcon bookmarkIcon() const { return m_bookmarkIcon; }
void updateBookmark(Bookmark *bookmark);
- void removeBookmark(Bookmark *bookmark); // Does not remove the mark
+ void updateBookmarkFileName(Bookmark *bookmark, const QString &oldFileName);
+ void deleteBookmark(Bookmark *bookmark); // Does not remove the mark
void removeAllBookmarks();
Bookmark *bookmarkForIndex(const QModelIndex &index) const;
@@ -119,6 +120,8 @@ private:
Bookmark *findBookmark(const QString &filePath, int lineNumber);
void addBookmark(Bookmark *bookmark, bool userset = true);
void addBookmark(const QString &s);
+ void addBookmarkToMap(Bookmark *bookmark);
+ bool removeBookmarkFromMap(Bookmark *bookmark, const QString &fileName = QString());
static QString bookmarkToString(const Bookmark *b);
void saveBookmarks();
void operateTooltip(QWidget *widget, const QPoint &pos, Bookmark *mark);
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 814e77bc148..ffa050e5a05 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -44,6 +44,8 @@
#include
#include
+#include
+#include
#include
#include
#include
@@ -217,6 +219,12 @@ void CorePlugin::extensionsInitialized()
m_findPlugin->extensionsInitialized();
m_locator->extensionsInitialized();
m_mainWindow->extensionsInitialized();
+ if (ExtensionSystem::PluginManager::hasError()) {
+ auto errorOverview = new ExtensionSystem::PluginErrorOverview(m_mainWindow);
+ errorOverview->setAttribute(Qt::WA_DeleteOnClose);
+ errorOverview->setModal(true);
+ errorOverview->show();
+ }
}
bool CorePlugin::delayedInitialize()
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index 78757e6b15e..418027b1bed 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -162,6 +162,16 @@ private:
IEditor *m_editor;
};
+bool isProbablyGlobalCompletion(const QStringList &list)
+{
+ const int numberOfPrimitivesAndBasicKeywords = (T_LAST_PRIMITIVE - T_FIRST_PRIMITIVE)
+ + (T_FIRST_OBJC_AT_KEYWORD - T_FIRST_KEYWORD);
+
+ return list.size() >= numberOfPrimitivesAndBasicKeywords
+ && list.contains(QLatin1String("if"))
+ && list.contains(QLatin1String("bool"));
+}
+
} // anonymous namespace
void CppToolsPlugin::test_completion_basic_1()
@@ -329,6 +339,31 @@ void CppToolsPlugin::test_completion()
QCOMPARE(actualCompletions, expectedCompletions);
}
+void CppToolsPlugin::test_global_completion_data()
+{
+ QTest::addColumn("code");
+ QTest::addColumn("prefix");
+
+ // Check that special completion after '&' for Qt5 signal/slots does not
+ // interfere global completion after '&'
+ QTest::newRow("global completion after & in return expression")
+ << _("void f() { foo(myObject, @); }\n")
+ << _("&");
+ QTest::newRow("global completion after & in function argument")
+ << _("int f() { return @; }\n")
+ << _("&");
+}
+
+void CppToolsPlugin::test_global_completion()
+{
+ QFETCH(QByteArray, code);
+ QFETCH(QByteArray, prefix);
+
+ CompletionTestCase test(code, prefix);
+ QVERIFY(test.succeededSoFar());
+ QVERIFY(isProbablyGlobalCompletion(test.getCompletions()));
+}
+
static void enumTestCase(const QByteArray &tag, const QByteArray &source,
const QByteArray &prefix = QByteArray())
{
@@ -2339,14 +2374,6 @@ void CppToolsPlugin::test_completion_data()
<< QLatin1String("hiddenFunction")
<< QLatin1String("hiddenSignal"));
- QTest::newRow("Qt5 signals: no class name completion if not after 'connect(' 1")
- << commonSignalSlotCompletionTestCode
- << _("foo(myObject, &") << (QStringList());
-
- QTest::newRow("Qt5 signals/slots: no class name completion if not after 'connect(' 2")
- << commonSignalSlotCompletionTestCode
- << _("&") << (QStringList());
-
QTest::newRow("Qt5 signals: fallback to scope completion")
<< commonSignalSlotCompletionTestCode
<< _("connect(myObject, &N::") << (QStringList()
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index bb482038ec4..8811ae5132c 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -1128,8 +1128,14 @@ int InternalCppCompletionAssistProcessor::startCompletionHelper()
// "connect(sender, &" or
// "connect(otherSender, &Foo::signal1, receiver, &"
const int beforeExpression = startOfExpression - 1;
- if (canCompleteClassNameAt2ndOr4thConnectArgument(m_interface.data(), beforeExpression))
+ if (canCompleteClassNameAt2ndOr4thConnectArgument(m_interface.data(),
+ beforeExpression)) {
m_model->m_completionOperator = CompleteQt5SignalOrSlotClassNameTrigger;
+ } else { // Ensure global completion
+ startOfExpression = endOfExpression = m_startPosition;
+ expression.clear();
+ m_model->m_completionOperator = T_EOF_SYMBOL;
+ }
} else if (m_model->m_completionOperator == T_COLON_COLON) {
// We expect 'expression' to be "Foo" in
// "connect(sender, &Foo::" or
diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp
index db84381fce9..e6ebee607cf 100644
--- a/src/plugins/cpptools/cppprojects.cpp
+++ b/src/plugins/cpptools/cppprojects.cpp
@@ -86,6 +86,8 @@ void ProjectPart::evaluateToolchain(const ToolChain *tc,
languageVersion = CXX14;
else if (flags & ToolChain::StandardCxx11)
languageVersion = CXX11;
+ else if (flags & ToolChain::StandardCxx98)
+ languageVersion = CXX98;
else
languageVersion = CXX11;
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index 128d9220850..ea9cc91ed74 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -112,6 +112,9 @@ private slots:
void test_completion_data();
void test_completion();
+ void test_global_completion_data();
+ void test_global_completion();
+
void test_completion_member_access_operator_data();
void test_completion_member_access_operator();
diff --git a/src/plugins/cpptools/cpptoolstestcase.cpp b/src/plugins/cpptools/cpptoolstestcase.cpp
index 4d0627faa18..5aebd874284 100644
--- a/src/plugins/cpptools/cpptoolstestcase.cpp
+++ b/src/plugins/cpptools/cpptoolstestcase.cpp
@@ -41,6 +41,7 @@
#include
#include
+#include
#include
#include
@@ -228,27 +229,30 @@ bool TestCase::writeFile(const QString &filePath, const QByteArray &contents)
return true;
}
-ProjectOpenerAndCloser::ProjectOpenerAndCloser(bool waitForFinishedGcOnDestruction)
- : m_waitForFinishedGcOnDestruction(waitForFinishedGcOnDestruction)
- , m_gcFinished(false)
+ProjectOpenerAndCloser::ProjectOpenerAndCloser()
{
QVERIFY(!SessionManager::hasProjects());
- if (m_waitForFinishedGcOnDestruction) {
- CppModelManager *mm = CppModelManager::instance();
- connect(mm, &CppModelManager::gcFinished, this, &ProjectOpenerAndCloser::onGcFinished);
- }
}
ProjectOpenerAndCloser::~ProjectOpenerAndCloser()
{
+ if (m_openProjects.isEmpty())
+ return;
+
+ bool hasGcFinished = false;
+ QMetaObject::Connection connection;
+ Utils::ExecuteOnDestruction disconnect([&]() { QObject::disconnect(connection); });
+ connection = QObject::connect(CppModelManager::instance(), &CppModelManager::gcFinished, [&]() {
+ hasGcFinished = true;
+ });
+
foreach (Project *project, m_openProjects)
ProjectExplorerPlugin::unloadProject(project);
- if (m_waitForFinishedGcOnDestruction) {
- m_gcFinished = false;
- while (!m_gcFinished)
- QCoreApplication::processEvents();
- }
+ QTime t;
+ t.start();
+ while (!hasGcFinished && t.elapsed() <= 30000)
+ QCoreApplication::processEvents();
}
ProjectInfo ProjectOpenerAndCloser::open(const QString &projectFile, bool configureAsExampleProject)
@@ -259,22 +263,18 @@ ProjectInfo ProjectOpenerAndCloser::open(const QString &projectFile, bool config
qWarning() << error;
if (!project)
return ProjectInfo();
- m_openProjects.append(project);
if (configureAsExampleProject)
project->configureAsExampleProject(QStringList());
- if (TestCase::waitUntilCppModelManagerIsAwareOf(project))
+ if (TestCase::waitUntilCppModelManagerIsAwareOf(project)) {
+ m_openProjects.append(project);
return CppModelManager::instance()->projectInfo(project);
+ }
return ProjectInfo();
}
-void ProjectOpenerAndCloser::onGcFinished()
-{
- m_gcFinished = true;
-}
-
TemporaryDir::TemporaryDir()
: m_temporaryDir(QFileInfo(QDir::tempPath()).canonicalFilePath()
+ QLatin1String("/qtcreator-tests-XXXXXX"))
diff --git a/src/plugins/cpptools/cpptoolstestcase.h b/src/plugins/cpptools/cpptoolstestcase.h
index acc76c6871b..f7a7343edeb 100644
--- a/src/plugins/cpptools/cpptoolstestcase.h
+++ b/src/plugins/cpptools/cpptoolstestcase.h
@@ -117,21 +117,15 @@ private:
bool m_runGarbageCollector;
};
-class CPPTOOLS_EXPORT ProjectOpenerAndCloser : public QObject
+class CPPTOOLS_EXPORT ProjectOpenerAndCloser
{
- Q_OBJECT
-
public:
- ProjectOpenerAndCloser(bool waitForFinishedGcOnDestruction = true);
+ ProjectOpenerAndCloser();
~ProjectOpenerAndCloser(); // Closes opened projects
ProjectInfo open(const QString &projectFile, bool configureAsExampleProject = false);
private:
- void onGcFinished();
-
- bool m_waitForFinishedGcOnDestruction;
- bool m_gcFinished;
QList m_openProjects;
};
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index 26b0ad1d60e..f3515afe3a5 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -423,12 +423,16 @@ QByteArray DebuggerResponse::toString() const
//
//////////////////////////////////////////////////////////////////////////////////
+// Tested in tests/auto/debugger/tst_gdb.cpp
+
void extractGdbVersion(const QString &msg,
int *gdbVersion, int *gdbBuildVersion, bool *isMacGdb, bool *isQnxGdb)
{
const QChar dot(QLatin1Char('.'));
- const bool ignoreParenthesisContent = msg.contains(QLatin1String("rubenvb"));
+ const bool ignoreParenthesisContent = msg.contains(QLatin1String("rubenvb"))
+ || msg.contains(QLatin1String("openSUSE"));
+
const QChar parOpen(QLatin1Char('('));
const QChar parClose(QLatin1Char(')'));
diff --git a/src/plugins/debugger/simplifytype.cpp b/src/plugins/debugger/simplifytype.cpp
index a1c9de55325..c4012b173cb 100644
--- a/src/plugins/debugger/simplifytype.cpp
+++ b/src/plugins/debugger/simplifytype.cpp
@@ -30,6 +30,7 @@
#include "simplifytype.h"
+#include
#include
#include
@@ -126,8 +127,14 @@ QString simplifyType(const QString &typeIn)
type.replace(QLatin1String("std::__debug::"), QLatin1String("std::"));
QRegExp simpleStringRE(QString::fromLatin1("std::basic_string ?"));
type.replace(simpleStringRE, QLatin1String("std::string"));
+
+ // Normalize space + ptr.
+ type.replace(QLatin1String(" *"), QLatin1String("@"));
type.replace(QLatin1Char('*'), QLatin1Char('@'));
+ // Normalize char const * and const char *.
+ type.replace(QLatin1String("char const@"), QLatin1String("const char@"));
+
for (int i = 0; i < 10; ++i) {
// boost::shared_ptr<...>::element_type
if (type.startsWith(QLatin1String("boost::shared_ptr<"))
@@ -303,7 +310,7 @@ QString simplifyType(const QString &typeIn)
}
} // with std::allocator
}
- type.replace(QLatin1Char('@'), QLatin1Char('*'));
+ type.replace(QLatin1Char('@'), QLatin1String(" *"));
type.replace(QLatin1String(" >"), QLatin1String(">"));
return type;
}
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 35ca4f85cc6..7b35a61dc0c 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2964,7 +2964,6 @@ void GitClient::interactiveRebase(const QString &workingDirectory, const QString
if (fixup)
arguments << QLatin1String("--autosquash");
arguments << commit + QLatin1Char('^');
- VcsOutputWindow::appendCommand(workingDirectory, vcsBinary(), arguments);
if (fixup)
m_disableEditor = true;
VcsCommand *command = vcsExecAbortable(workingDirectory, arguments);
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 2ad2dbcbe0c..d03a2dfe1eb 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -665,7 +665,6 @@ void HelpPlugin::doSetupIfNeeded()
{
LocalHelpManager::setupGuiHelpEngine();
if (m_setupNeeded) {
- qApp->processEvents();
resetFilter();
m_setupNeeded = false;
OpenPagesManager::instance().setupInitialPages();
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index 320bf869767..1ad40a8702c 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -448,6 +448,7 @@ ToolChain::CompilerFlags GccToolChain::compilerFlags(const QStringList &cxxflags
const QByteArray std = flag.mid(5).toLatin1();
if (std == "c++98" || std == "c++03") {
flags &= ~CompilerFlags(StandardCxx11 | StandardCxx14 | StandardCxx17 | GnuExtensions);
+ flags |= StandardCxx98;
} else if (std == "gnu++98" || std == "gnu++03") {
flags &= ~CompilerFlags(StandardCxx11 | StandardCxx14 | StandardCxx17);
flags |= GnuExtensions;
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index 2ac1dd1baed..1ad894741bf 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -101,7 +101,8 @@ public:
OpenMP = 0x40,
ObjectiveC = 0x80,
StandardCxx14 = 0x100,
- StandardCxx17 = 0x200
+ StandardCxx17 = 0x200,
+ StandardCxx98 = 0x400,
};
Q_DECLARE_FLAGS(CompilerFlags, CompilerFlag)
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index 8e1f783806b..8b6defe2f07 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -264,6 +264,19 @@ QString QbsFileNode::displayName() const
return ProjectExplorer::FileNode::displayName() + QLatin1Char(':') + QString::number(l);
}
+
+QbsFolderNode::QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer::NodeType nodeType,
+ const QString &displayName)
+ : ProjectExplorer::FolderNode(folderPath, nodeType, displayName)
+{
+}
+
+QList QbsFolderNode::supportedActions(ProjectExplorer::Node *node) const
+{
+ Q_UNUSED(node);
+ return QList();
+}
+
// ---------------------------------------------------------------------------
// QbsBaseProjectNode:
// ---------------------------------------------------------------------------
@@ -547,9 +560,9 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, const qbs::Gro
break;
}
if (!fn) {
- fn = new FolderNode(Utils::FileName::fromString(c->path()),
- ProjectExplorer::FolderNodeType,
- displayNameFromPath(c->path(), baseDir));
+ fn = new QbsFolderNode(Utils::FileName::fromString(c->path()),
+ ProjectExplorer::FolderNodeType,
+ displayNameFromPath(c->path(), baseDir));
root->addFolderNodes(QList() << fn);
} else {
foldersToRemove.removeOne(fn);
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index fe30597800d..ef10ae2a603 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -57,6 +57,16 @@ public:
QString displayName() const;
};
+class QbsFolderNode : public ProjectExplorer::FolderNode
+{
+public:
+ QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer::NodeType nodeType,
+ const QString &displayName);
+
+private:
+ QList supportedActions(ProjectExplorer::Node *node) const;
+};
+
// ---------------------------------------------------------------------------
// QbsBaseProjectNode:
// ---------------------------------------------------------------------------
diff --git a/src/plugins/qmlprofiler/qmlprofilertimelinemodel.cpp b/src/plugins/qmlprofiler/qmlprofilertimelinemodel.cpp
index b2411a5da8e..7bdaa119bf3 100644
--- a/src/plugins/qmlprofiler/qmlprofilertimelinemodel.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertimelinemodel.cpp
@@ -39,7 +39,7 @@ QmlProfilerTimelineModel::QmlProfilerTimelineModel(QmlProfilerModelManager *mode
TimelineModel(modelManager->registerModelProxy(), displayName, parent), m_message(message),
m_rangeType(rangeType), m_modelManager(modelManager)
{
- connect(modelManager->qmlModel(), &QmlProfilerDataModel::changed,
+ connect(modelManager, &QmlProfilerModelManager::stateChanged,
this, &QmlProfilerTimelineModel::dataChanged);
}
@@ -91,7 +91,7 @@ void QmlProfilerTimelineModel::dataChanged()
{
switch (m_modelManager->state()) {
- case QmlProfilerDataState::ProcessingData:
+ case QmlProfilerDataState::Done:
loadData();
emit emptyChanged();
break;
diff --git a/src/plugins/resourceeditor/qrceditor/resourcefile.cpp b/src/plugins/resourceeditor/qrceditor/resourcefile.cpp
index 1f32ca276ee..ce6bd87a5dc 100644
--- a/src/plugins/resourceeditor/qrceditor/resourcefile.cpp
+++ b/src/plugins/resourceeditor/qrceditor/resourcefile.cpp
@@ -547,8 +547,8 @@ void ResourceFile::clearPrefixList()
** ResourceModel
*/
-ResourceModel::ResourceModel(const ResourceFile &resource_file, QObject *parent)
- : QAbstractItemModel(parent), m_resource_file(resource_file), m_dirty(false)
+ResourceModel::ResourceModel(QObject *parent)
+ : QAbstractItemModel(parent), m_dirty(false)
{
m_prefixIcon = Core::FileIconProvider::overlayIcon(QStyle::SP_DirIcon,
QIcon(QLatin1String(":/resourceeditor/images/qt_qrc.png")), QSize(16, 16));
@@ -648,6 +648,11 @@ void ResourceModel::refresh()
m_resource_file.refresh();
}
+QString ResourceModel::errorMessage() const
+{
+ return m_resource_file.errorMessage();
+}
+
Qt::ItemFlags ResourceModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags f = QAbstractItemModel::flags(index);
diff --git a/src/plugins/resourceeditor/qrceditor/resourcefile_p.h b/src/plugins/resourceeditor/qrceditor/resourcefile_p.h
index ac3b7101552..75806f1eb3e 100644
--- a/src/plugins/resourceeditor/qrceditor/resourcefile_p.h
+++ b/src/plugins/resourceeditor/qrceditor/resourcefile_p.h
@@ -203,7 +203,7 @@ class ResourceModel : public QAbstractItemModel
Q_OBJECT
public:
- explicit ResourceModel(const ResourceFile &resource_file, QObject *parent = 0);
+ explicit ResourceModel(QObject *parent = 0);
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const;
@@ -215,6 +215,8 @@ public:
void refresh();
+ QString errorMessage() const;
+
protected:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
diff --git a/src/plugins/resourceeditor/qrceditor/resourceview.cpp b/src/plugins/resourceeditor/qrceditor/resourceview.cpp
index 03f641745f1..086a8653b0a 100644
--- a/src/plugins/resourceeditor/qrceditor/resourceview.cpp
+++ b/src/plugins/resourceeditor/qrceditor/resourceview.cpp
@@ -103,7 +103,7 @@ void PrefixEntryBackup::restore() const
class RelativeResourceModel : public ResourceModel
{
public:
- RelativeResourceModel(const ResourceFile &resource_file, QObject *parent = 0);
+ RelativeResourceModel(QObject *parent = 0);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
@@ -129,8 +129,8 @@ private:
bool m_resourceDragEnabled;
};
-RelativeResourceModel::RelativeResourceModel(const ResourceFile &resource_file, QObject *parent) :
- ResourceModel(resource_file, parent),
+RelativeResourceModel::RelativeResourceModel(QObject *parent) :
+ ResourceModel(parent),
m_resourceDragEnabled(false)
{
}
@@ -190,7 +190,7 @@ using namespace ResourceEditor::Internal;
ResourceView::ResourceView(QUndoStack *history, QWidget *parent) :
Utils::TreeView(parent),
- m_qrcModel(new RelativeResourceModel(m_qrcFile, this)),
+ m_qrcModel(new RelativeResourceModel(this)),
m_history(history),
m_mergeId(-1)
{
@@ -386,6 +386,11 @@ QString ResourceView::contents() const
return m_qrcModel->contents();
}
+QString ResourceView::errorMessage() const
+{
+ return m_qrcModel->errorMessage();
+}
+
QString ResourceView::currentAlias() const
{
const QModelIndex current = currentIndex();
diff --git a/src/plugins/resourceeditor/qrceditor/resourceview.h b/src/plugins/resourceeditor/qrceditor/resourceview.h
index 0f1abfce2b0..9468550e80d 100644
--- a/src/plugins/resourceeditor/qrceditor/resourceview.h
+++ b/src/plugins/resourceeditor/qrceditor/resourceview.h
@@ -86,7 +86,7 @@ public:
bool load(const QString &fileName);
bool save();
QString contents() const;
- QString errorMessage() const { return m_qrcFile.errorMessage(); }
+ QString errorMessage() const;
QString fileName() const;
void setFileName(const QString &fileName);
@@ -141,7 +141,6 @@ private:
void addUndoCommand(const QModelIndex &nodeIndex, NodeProperty property,
const QString &before, const QString &after);
- ResourceFile m_qrcFile;
RelativeResourceModel *m_qrcModel;
QUndoStack *m_history;
diff --git a/src/shared/qbs b/src/shared/qbs
index 7950b45a1ed..6b726e800b9 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit 7950b45a1ed927dcc8bf0463dc3a48bb6a408aeb
+Subproject commit 6b726e800b96efbf5a7b77dac524c60a8b421b8d
diff --git a/tests/auto/debugger/debugger.pro b/tests/auto/debugger/debugger.pro
index 164bede576a..3535e9c53af 100644
--- a/tests/auto/debugger/debugger.pro
+++ b/tests/auto/debugger/debugger.pro
@@ -1,10 +1,17 @@
TEMPLATE = subdirs
-SUBDIRS += gdb.pro
-SUBDIRS += dumpers.pro
+gdb.file = gdb.pro
+simplifytypes.file = simplifytypes.pro
+
+# avoid race condition when compiling with multiple jobs
+dumpers.depends = gdb simplifytypes
+dumpers.file = dumpers.pro
+
+SUBDIRS += gdb
+SUBDIRS += simplifytypes
+SUBDIRS += dumpers
SUBDIRS += namedemangler.pro
-SUBDIRS += simplifytypes.pro
SUBDIRS += disassembler.pro
SUBDIRS += offsets.pro
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 39e7c3bb8a3..b365da3e095 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -383,13 +383,15 @@ struct UnsubstitutedValue : Value
UnsubstitutedValue(const QByteArray &value) : Value(value) { substituteNamespace = false; }
};
+struct Optional {};
+
struct Type
{
Type() : qtVersion(0), isPattern(false) {}
Type(const char *str) : type(str), qtVersion(0), isPattern(false) {}
Type(const QByteArray &ba) : type(ba), qtVersion(0), isPattern(false) {}
- bool matches(const QByteArray &actualType0, const Context &context) const
+ bool matches(const QByteArray &actualType0, const Context &context, bool fullNamespaceMatch = true) const
{
if (context.qtVersion) {
if (qtVersion == 4) {
@@ -412,13 +414,30 @@ struct Type
expectedType.replace(' ', "");
expectedType.replace("const", "");
expectedType.replace('@', context.nameSpace);
+ if (fullNamespaceMatch)
+ expectedType.replace('?', context.nameSpace);
+ else
+ expectedType.replace('?', "");
+
if (isPattern) {
QString actual = QString::fromLatin1(actualType);
QString expected = QString::fromLatin1(expectedType);
return QRegExp(expected).exactMatch(actual);
}
- return actualType == expectedType;
+
+ if (actualType == expectedType)
+ return true;
+
+ // LLDB 3.7 on Linux doesn't get the namespace right in QMapNode:
+ // t = lldb.target.FindFirstType('Myns::QMapNode')
+ // t.GetName() -> QMapNode (no Myns::)
+ // So try again without namespace.
+ if (fullNamespaceMatch)
+ return matches(actualType0, context, false);
+
+ return false;
}
+
QByteArray type;
int qtVersion;
bool isPattern;
@@ -454,12 +473,13 @@ enum DebuggerEngine
struct CheckBase
{
- CheckBase() : enginesForCheck(AllEngines) {}
+ CheckBase() : enginesForCheck(AllEngines), optionallyPresent(false) {}
mutable int enginesForCheck;
mutable VersionBase debuggerVersionForCheck;
mutable VersionBase gccVersionForCheck;
mutable VersionBase clangVersionForCheck;
mutable QtVersion qtVersionForCheck;
+ mutable bool optionallyPresent;
};
struct Check : CheckBase
@@ -486,6 +506,12 @@ struct Check : CheckBase
&& qtVersionForCheck.covers(context.qtVersion);
}
+ const Check &operator%(Optional) const
+ {
+ optionallyPresent = true;
+ return *this;
+ }
+
const Check &operator%(DebuggerEngine engine)
{
enginesForCheck = engine;
@@ -1058,8 +1084,15 @@ void tst_Dumpers::dumper()
if (pos != -1)
output = output.left(pos);
qDebug() << "Extracting GCC version from: " << output;
- pos = output.lastIndexOf(' ');
- output = output.mid(pos + 1);
+ if (output.contains(QByteArray("SUSE Linux"))) {
+ pos = output.indexOf(')');
+ output = output.mid(pos + 1).trimmed();
+ pos = output.indexOf(' ');
+ output = output.left(pos);
+ } else {
+ pos = output.lastIndexOf(' ');
+ output = output.mid(pos + 1);
+ }
int pos1 = output.indexOf('.');
int major = output.left(pos1++).toInt();
int pos2 = output.indexOf('.', pos1 + 1);
@@ -1273,7 +1306,7 @@ void tst_Dumpers::dumper()
cmds = "sc import sys\n"
"sc sys.path.insert(1, '" + dumperDir + "')\n"
"sc from lldbbridge import *\n"
- "sc print(dir())\n"
+ // "sc print(dir())\n"
"sc Tester('" + t->buildPath.toLatin1() + "/doit', [" + expandedq + "])\n"
"quit\n";
@@ -1429,16 +1462,17 @@ void tst_Dumpers::dumper()
}
if (!data.checks.isEmpty()) {
- bool fail = false;
qDebug() << "SOME TESTS NOT EXECUTED: ";
foreach (const Check &check, data.checks) {
- qDebug() << " TEST NOT FOUND FOR INAME: " << check.iname;
- if (!fail && check.expectedValue.qtVersion != 0)
- fail = true;
+ if (check.optionallyPresent) {
+ qDebug() << " OPTIONAL TEST NOT FOUND FOR INAME: " << check.iname << " IGNORED.";
+ } else {
+ qDebug() << " COMPULSORY TEST NOT FOUND FOR INAME: " << check.iname;
+ ok = false;
+ }
}
qDebug() << "SEEN INAMES " << seenINames;
qDebug() << "EXPANDED : " << expanded;
- ok = false;
}
if (ok) {
m_keepTemp = false;
@@ -1592,33 +1626,33 @@ void tst_Dumpers::dumper_data()
+ Check("d0", "(invalid)", "@QDate")
+ Check("d1", "Tue Jan 1 1980", "@QDate")
- + Check("d1.(ISO)", "\"1980-01-01\"", "@QString") % NoCdbEngine
- + CheckType("d1.(Locale)", "@QString") % NoCdbEngine
- + CheckType("d1.(SystemLocale)", "@QString") % NoCdbEngine
- + Check("d1.toString", "\"Tue Jan 1 1980\"", "@QString") % NoCdbEngine
+ + Check("d1.(ISO)", "\"1980-01-01\"", "@QString") % NoCdbEngine % Optional()
+ + Check("d1.toString", "\"Tue Jan 1 1980\"", "@QString") % NoCdbEngine % Optional()
+ + CheckType("d1.(Locale)", "@QString") % NoCdbEngine % Optional()
+ + CheckType("d1.(SystemLocale)", "@QString") % NoCdbEngine % Optional()
+ Check("t0", "(invalid)", "@QTime")
+ Check("t1", "13:15:32", "@QTime")
+ Check("t1.(ISO)", "\"13:15:32\"", "@QString") % NoCdbEngine
- + CheckType("t1.(Locale)", "@QString") % NoCdbEngine
- + CheckType("t1.(SystemLocale)", "@QString") % NoCdbEngine
+ Check("t1.toString", "\"13:15:32\"", "@QString") % NoCdbEngine
+ + CheckType("t1.(Locale)", "@QString") % NoCdbEngine % Optional()
+ + CheckType("t1.(SystemLocale)", "@QString") % NoCdbEngine % Optional()
+ Check("dt0", "(invalid)", "@QDateTime")
+ Check("dt1", Value4("Tue Jan 1 13:15:32 1980"), "@QDateTime")
+ Check("dt1", Value5("Tue Jan 1 13:15:32 1980 GMT"), "@QDateTime")
+ Check("dt1.(ISO)",
- "\"1980-01-01T13:15:32Z\"", "@QString") % NoCdbEngine
- + CheckType("dt1.(Locale)", "@QString") % NoCdbEngine
- + CheckType("dt1.(SystemLocale)", "@QString") % NoCdbEngine
+ "\"1980-01-01T13:15:32Z\"", "@QString") % NoCdbEngine % Optional()
+ + CheckType("dt1.(Locale)", "@QString") % NoCdbEngine % Optional()
+ + CheckType("dt1.(SystemLocale)", "@QString") % NoCdbEngine % Optional()
+ Check("dt1.toString",
- Value4("\"Tue Jan 1 13:15:32 1980\""), "@QString") % NoCdbEngine
+ Value4("\"Tue Jan 1 13:15:32 1980\""), "@QString") % NoCdbEngine % Optional()
+ Check("dt1.toString",
- Value5("\"Tue Jan 1 13:15:32 1980 GMT\""), "@QString") % NoCdbEngine
+ Value5("\"Tue Jan 1 13:15:32 1980 GMT\""), "@QString") % NoCdbEngine % Optional()
+ Check("dt1.toUTC",
- Value4("Tue Jan 1 13:15:32 1980"), "@QDateTime") % NoCdbEngine
+ Value4("Tue Jan 1 13:15:32 1980"), "@QDateTime") % NoCdbEngine % Optional()
+ Check("dt1.toUTC",
- Value5("Tue Jan 1 13:15:32 1980 GMT"), "@QDateTime") % NoCdbEngine;
+ Value5("Tue Jan 1 13:15:32 1980 GMT"), "@QDateTime") % NoCdbEngine % Optional();
#ifdef Q_OS_WIN
QByteArray tempDir = "\"C:/Program Files\"";
@@ -2165,11 +2199,11 @@ void tst_Dumpers::dumper_data()
+ Check("m0", "<0 items>", "@QMap")
+ Check("m1", "<2 items>", "@QMap")
- + Check("m1.0", "[0]", "", "@QMapNode")
+ + Check("m1.0", "[0]", "", "?QMapNode")
+ Check("m1.0.key", "11", "unsigned int")
+ Check("m1.0.value", "<1 items>", "@QStringList")
+ Check("m1.0.value.0", "[0]", "\"11\"", "@QString")
- + Check("m1.1", "[1]", "", "@QMapNode")
+ + Check("m1.1", "[1]", "", "?QMapNode")
+ Check("m1.1.key", "22", "unsigned int")
+ Check("m1.1.value", "<1 items>", "@QStringList")
+ Check("m1.1.value.0", "[0]", "\"22\"", "@QString")
@@ -2179,41 +2213,41 @@ void tst_Dumpers::dumper_data()
+ Check("m2.1", "[1] 22", FloatValue("32.0"), "float")
+ Check("m3", "<2 items>", "T")
- + Check("m3.0", "[0]", "", "@QMapNode")
+ + Check("m3.0", "[0]", "", "?QMapNode")
+ Check("m4", "<1 items>", "@QMap<@QString, float>")
- + Check("m4.0", "[0]", "", "@QMapNode<@QString, float>")
+ + Check("m4.0", "[0]", "", "?QMapNode<@QString, float>")
+ Check("m4.0.key", "\"22.0\"", "@QString")
+ Check("m4.0.value", "22", "float")
+ Check("m5", "<1 items>", "@QMap")
- + Check("m5.0", "[0]", "", "@QMapNode")
+ + Check("m5.0", "[0]", "", "?QMapNode")
+ Check("m5.0.key", "22", "int")
+ Check("m5.0.value", "\"22.0\"", "@QString")
+ Check("m6", "<2 items>", "@QMap<@QString, Foo>")
- + Check("m6.0", "[0]", "", "@QMapNode<@QString, Foo>")
+ + Check("m6.0", "[0]", "", "?QMapNode<@QString, Foo>")
+ Check("m6.0.key", "\"22.0\"", "@QString")
+ Check("m6.0.value", "", "Foo")
+ Check("m6.0.value.a", "22", "int")
- + Check("m6.1", "[1]", "", "@QMapNode<@QString, Foo>")
+ + Check("m6.1", "[1]", "", "?QMapNode<@QString, Foo>")
+ Check("m6.1.key", "\"33.0\"", "@QString")
+ Check("m6.1.value", "", "Foo")
+ Check("m6.1.value.a", "33", "int")
+ Check("m7", "<3 items>", "@QMap<@QString, @QPointer<@QObject>>")
- + Check("m7.0", "[0]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m7.0", "[0]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m7.0.key", "\".\"", "@QString")
+ Check("m7.0.value", "", "@QPointer<@QObject>")
//+ Check("m7.0.value.o", Pointer(), "@QObject")
// FIXME: it's '.wp' in Qt 5
- + Check("m7.1", "[1]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m7.1", "[1]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m7.1.key", "\"Hallo\"", "@QString")
- + Check("m7.2", "[2]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m7.2", "[2]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m7.2.key", "\"Welt\"", "@QString")
+ Check("m8", "<4 items>", "@QMap<@QString, @QList>")
- + Check("m8.0", "[0]", "", "@QMapNode<@QString, @QList>")
+ + Check("m8.0", "[0]", "", "?QMapNode<@QString, @QList>")
+ Check("m8.0.key", "\"1\"", "@QString")
+ Check("m8.0.value", "<3 items>", "@QList")
+ Check("m8.0.value.0", "[0]", "", "nsA::nsB::SomeType")
@@ -2222,7 +2256,7 @@ void tst_Dumpers::dumper_data()
+ Check("m8.0.value.1.a", "2", "int")
+ Check("m8.0.value.2", "[2]", "", "nsA::nsB::SomeType")
+ Check("m8.0.value.2.a", "3", "int")
- + Check("m8.3", "[3]", "", "@QMapNode<@QString, @QList>")
+ + Check("m8.3", "[3]", "", "?QMapNode<@QString, @QList>")
+ Check("m8.3.key", "\"foo\"", "@QString")
+ Check("m8.3.value", "<3 items>", "@QList")
+ Check("m8.3.value.2", "[2]", "", "nsA::nsB::SomeType")
@@ -2274,33 +2308,33 @@ void tst_Dumpers::dumper_data()
+ Check("m1.5", "[5] 22", "22", "float")
+ Check("m2", "<1 items>", "@QMultiMap<@QString, float>")
- + Check("m2.0", "[0]", "", "@QMapNode<@QString, float>")
+ + Check("m2.0", "[0]", "", "?QMapNode<@QString, float>")
+ Check("m2.0.key", "\"22.0\"", "@QString")
+ Check("m2.0.value", "22", "float")
+ CoreProfile()
+ Check("m3", "<1 items>", "@QMultiMap")
- + Check("m3.0", "[0]", "", "@QMapNode")
+ + Check("m3.0", "[0]", "", "?QMapNode")
+ Check("m3.0.key", "22", "int")
+ Check("m3.0.value", "\"22.0\"", "@QString")
+ CoreProfile()
+ Check("m4", "<3 items>", "@QMultiMap<@QString, Foo>")
- + Check("m4.0", "[0]", "", "@QMapNode<@QString, Foo>")
+ + Check("m4.0", "[0]", "", "?QMapNode<@QString, Foo>")
+ Check("m4.0.key", "\"22.0\"", "@QString")
+ Check("m4.0.value", "", "Foo")
+ Check("m4.0.value.a", "22", "int")
- + Check("m4.2", "[2]", "", "@QMapNode<@QString, Foo>")
+ + Check("m4.2", "[2]", "", "?QMapNode<@QString, Foo>")
+ Check("m5", "<4 items>", "@QMultiMap<@QString, @QPointer<@QObject>>")
- + Check("m5.0", "[0]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m5.0", "[0]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m5.0.key", "\".\"", "@QString")
+ Check("m5.0.value", "", "@QPointer<@QObject>")
- + Check("m5.1", "[1]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m5.1", "[1]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m5.1.key", "\".\"", "@QString")
- + Check("m5.2", "[2]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m5.2", "[2]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m5.2.key", "\"Hallo\"", "@QString")
- + Check("m5.3", "[3]", "", "@QMapNode<@QString, @QPointer<@QObject>>")
+ + Check("m5.3", "[3]", "", "?QMapNode<@QString, @QPointer<@QObject>>")
+ Check("m5.3.key", "\"Welt\"", "@QString");
@@ -2902,13 +2936,13 @@ void tst_Dumpers::dumper_data()
+ Check("url0", "", "@QUrl")
+ Check5("url1", UnsubstitutedValue("\"http://foo@qt-project.org:10/have_fun\""), "@QUrl")
+ Check5("url1.port", "10", "int")
- + Check5("url1.scheme", "\"http\"", "@QString")
- + Check5("url1.userName", "\"foo\"", "@QString")
- + Check5("url1.password", "\"\"", "@QString")
- + Check5("url1.host", "\"qt-project.org\"", "@QString")
- + Check5("url1.path", "\"/have_fun\"", "@QString")
- + Check5("url1.query", "\"\"", "@QString")
- + Check5("url1.fragment", "\"\"", "@QString")
+ + Check5("url1.scheme", "\"http\"", "?QString")
+ + Check5("url1.userName", "\"foo\"", "?QString")
+ + Check5("url1.password", "\"\"", "?QString")
+ + Check5("url1.host", "\"qt-project.org\"", "?QString")
+ + Check5("url1.path", "\"/have_fun\"", "?QString")
+ + Check5("url1.query", "\"\"", "?QString")
+ + Check5("url1.fragment", "\"\"", "?QString")
// check Qt4 internal structure for QUrl
+ Check4("url1", "", "@QUrl")
@@ -3051,8 +3085,9 @@ void tst_Dumpers::dumper_data()
"{\n"
" void run()\n"
" {\n"
- " if (m_id == 3)\n"
+ " if (m_id == 3) {\n"
" BREAK;\n"
+ " }\n"
" }\n"
" int m_id;\n"
"};\n",
@@ -3116,21 +3151,21 @@ void tst_Dumpers::dumper_data()
+ CheckType("v1", "@QVariant (QString)")
+ Check("my", "<2 items>", "MyType")
- + Check("my.0", "[0]", "", "@QMapNode")
+ + Check("my.0", "[0]", "", "?QMapNode")
+ Check("my.0.key", "1", "unsigned int")
+ Check("my.0.value", "<1 items>", "@QStringList")
+ Check("my.0.value.0", "[0]", "\"Hello\"", "@QString")
- + Check("my.1", "[1]", "", "@QMapNode")
+ + Check("my.1", "[1]", "", "?QMapNode")
+ Check("my.1.key", "3", "unsigned int")
+ Check("my.1.value", "<1 items>", "@QStringList")
+ Check("my.1.value.0", "[0]", "\"World\"", "@QString")
+ CheckType("v2", "@QVariant (MyType)")
+ Check("v2.data", "<2 items>", "MyType")
- + Check("v2.data.0", "[0]", "", "@QMapNode")
+ + Check("v2.data.0", "[0]", "", "?QMapNode")
+ Check("v2.data.0.key", "1", "unsigned int")
+ Check("v2.data.0.value", "<1 items>", "@QStringList")
+ Check("v2.data.0.value.0", "[0]", "\"Hello\"", "@QString")
- + Check("v2.data.1", "[1]", "", "@QMapNode")
+ + Check("v2.data.1", "[1]", "", "?QMapNode")
+ Check("v2.data.1.key", "3", "unsigned int")
+ Check("v2.data.1.value", "<1 items>", "@QStringList")
+ Check("v2.data.1.value.0", "[0]", "\"World\"", "@QString")
@@ -3284,7 +3319,7 @@ void tst_Dumpers::dumper_data()
+ Check("var14", "(invalid)", "@QVariant (QDate)")
+ Check("var15", "(invalid)", "@QVariant (QTime)")
+ Check("var16", "(invalid)", "@QVariant (QDateTime)")
- + Check("var17.d", "", "@QUrlPrivate")
+ + CheckType("var17.d", Pattern(".*QUrlPrivate.*"))
+ Check5("var17", UnsubstitutedValue("\"http://foo@qt-project.org:10/have_fun\""), "@QVariant (QUrl)")
+ Check("var17.port", "10", "int")
+ Check("var18", "\"en_US\"", "@QVariant (QLocale)")
@@ -3327,7 +3362,7 @@ void tst_Dumpers::dumper_data()
+ Check("var83", "", "@QVariant (QVector3D)")
+ Check("var84", "", "@QVariant (QVector4D)")
+ Check("var85", "", "@QVariant (QQuaternion)")
- + Check("var86", "<0 items>", "@QVariant (QPolygonF)");
+ + Check5("var86", "<0 items>", "@QVariant (QPolygonF)");
QTest::newRow("QVariant4")
@@ -3421,10 +3456,10 @@ void tst_Dumpers::dumper_data()
+ Check("vm0", "<0 items>", "@QVariantMap")
+ Check("vm1", "<6 items>", "@QVariantMap")
- + Check("vm1.0", "[0]", "", "@QMapNode<@QString, @QVariant>")
+ + Check("vm1.0", "[0]", "", "?QMapNode<@QString, @QVariant>")
+ Check("vm1.0.key", "\"a\"", "@QString")
+ Check("vm1.0.value", "1", "@QVariant (int)")
- + Check("vm1.5", "[5]", "", "@QMapNode<@QString, @QVariant>")
+ + Check("vm1.5", "[5]", "", "?QMapNode<@QString, @QVariant>")
+ Check("vm1.5.key", "\"f\"", "@QString")
+ Check("vm1.5.value", "\"2Some String\"", "@QVariant (QString)")
@@ -4372,12 +4407,12 @@ void tst_Dumpers::dumper_data()
"std::unordered_map map1;\n"
"map1[11] = 1;\n"
"map1[22] = 2;\n"
+ "unused(&map1);\n\n"
"std::unordered_map map2;\n"
"map2[\"11.0\"] = 11.0;\n"
"map2[\"22.0\"] = 22.0;\n"
-
- "unused(&map1);\n")
+ "unused(&map2);\n")
+ Cxx11Profile()
@@ -5347,7 +5382,7 @@ void tst_Dumpers::dumper_data()
"QMap::iterator it = map.begin();\n")
+ CoreProfile()
+ Check("map", "<2 items>", "@QMap")
- + CheckType("map.0", "[0]", "@QMapNode")
+ + CheckType("map.0", "[0]", "?QMapNode")
+ Check("map.0.key", "-1", "int")
+ CheckType("map.0.value", "CustomStruct")
+ Check("map.0.value.dvalue", FloatValue("3.14"), "double")
@@ -5740,7 +5775,7 @@ void tst_Dumpers::dumper_data()
"unused(&v, &n);\n")
+ Check("v", "", "{...}") % GdbEngine
- + Check("v", "", Pattern("")) % LldbEngine
+ + Check("v", "", Pattern(".*anonymous .*")) % LldbEngine
+ Check("n", "", "S")
+ Check("v.a", "2", "int") % GdbVersion(0, 70699)
+ Check("v.0.a", "2", "int") % GdbVersion(70700)
diff --git a/tests/auto/debugger/tst_gdb.cpp b/tests/auto/debugger/tst_gdb.cpp
index 2b7d079d511..9f65b4fd20f 100644
--- a/tests/auto/debugger/tst_gdb.cpp
+++ b/tests/auto/debugger/tst_gdb.cpp
@@ -61,9 +61,7 @@ void tst_gdb::version()
bool qnx = true;
Debugger::Internal::extractGdbVersion(msg, &v, &bv, &mac, &qnx);
//qDebug() << msg << " -> " << v << bv << mac << qnx;
- QEXPECT_FAIL("openSUSE 13.1", "Not done yet", Continue);
QCOMPARE(v, gdbVersion);
- QEXPECT_FAIL("openSUSE 13.1", "Not done yet", Continue);
QCOMPARE(bv, gdbBuildVersion);
QCOMPARE(mac, isMacGdb);
QCOMPARE(qnx, isQnxGdb);
@@ -124,6 +122,10 @@ void tst_gdb::version_data()
QTest::newRow("openSUSE 13.1")
<< "GNU gdb (GDB; openSUSE 13.1) 7.6.50.20130731-cvs"
<< 70650 << 20130731 << false << false;
+
+ QTest::newRow("openSUSE 13.2")
+ << "GNU gdb (GDB; openSUSE 13.2) 7.8"
+ << 70800 << 0 << false << false;
}
static QString chopConst(QString type)
diff --git a/tests/auto/debugger/tst_simplifytypes.cpp b/tests/auto/debugger/tst_simplifytypes.cpp
index 243279bac54..2251e8ca5ea 100644
--- a/tests/auto/debugger/tst_simplifytypes.cpp
+++ b/tests/auto/debugger/tst_simplifytypes.cpp
@@ -48,6 +48,8 @@ const char *description[] =
"g++_wstringvector",
"g++_unordered_set",
"g++_unordered_map",
+ "g++_stdvector_int_ptr",
+ "g++_stdmap_char_ptr",
"libc++_stringvector",
"libc++_unordered_map",
@@ -83,6 +85,9 @@ const char *input[] =
"std::unordered_set, std::equal_to, std::allocator >",
"std::unordered_map, std::equal_to, std::allocator > >",
+"std::vector >",
+"std::map, std::allocator > >",
+
// libc++
"std::__1::vector, std::__1::allocator >, std::__1::allocator, std::__1::allocator > > >",
@@ -119,6 +124,8 @@ const char *output[] =
"std::vector",
"std::unordered_set",
"std::unordered_map",
+ "std::vector",
+ "std::map",
// libc++
"std::vector",
"std::unordered_map",
diff --git a/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp b/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp
index 7080d11bbaa..078bcbb04eb 100644
--- a/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp
+++ b/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp
@@ -232,8 +232,12 @@ void tst_TimelineModel::height()
QCOMPARE(dummy.height(), 2 * DefaultRowHeight);
dummy.setExpanded(true);
QCOMPARE(dummy.height(), 3 * DefaultRowHeight);
- dummy.setExpandedRowHeight(0, 80);
+ dummy.setExpandedRowHeight(1, 80);
QCOMPARE(dummy.height(), 2 * DefaultRowHeight + 80);
+ dummy.clear();
+ dummy.loadData();
+ dummy.setExpanded(true);
+ QCOMPARE(dummy.rowHeight(1), DefaultRowHeight); // Make sure the row height gets reset.
}
void tst_TimelineModel::count()
diff --git a/tests/manual/ssh/tunnel/tunnel.cpp b/tests/manual/ssh/tunnel/tunnel.cpp
index 2766a246555..8df12defac2 100644
--- a/tests/manual/ssh/tunnel/tunnel.cpp
+++ b/tests/manual/ssh/tunnel/tunnel.cpp
@@ -48,7 +48,7 @@ using namespace QSsh;
Tunnel::Tunnel(const SshConnectionParameters ¶meters, QObject *parent)
: QObject(parent),
m_connection(new SshConnection(parameters, this)),
- m_tunnelServer(new QTcpServer(this)),
+ m_targetServer(new QTcpServer(this)),
m_expectingChannelClose(false)
{
connect(m_connection, SIGNAL(connected()), SLOT(handleConnected()));
@@ -74,16 +74,17 @@ void Tunnel::handleConnectionError()
void Tunnel::handleConnected()
{
std::cout << "Opening server side..." << std::endl;
- if (!m_tunnelServer->listen(QHostAddress::LocalHost)) {
+ if (!m_targetServer->listen(QHostAddress::LocalHost)) {
std::cerr << "Error opening port: "
- << m_tunnelServer->errorString().toLocal8Bit().constData() << std::endl;
+ << m_targetServer->errorString().toLocal8Bit().constData() << std::endl;
qApp->exit(EXIT_FAILURE);
return;
}
- m_forwardedPort = m_tunnelServer->serverPort();
- connect(m_tunnelServer, SIGNAL(newConnection()), SLOT(handleNewConnection()));
+ m_targetPort = m_targetServer->serverPort();
+ connect(m_targetServer, SIGNAL(newConnection()), SLOT(handleNewConnection()));
- m_tunnel = m_connection->createTunnel(m_forwardedPort);
+ m_tunnel = m_connection->createTunnel(QLatin1String("localhost"), 1024, // made-up values
+ QLatin1String("localhost"), m_targetPort);
connect(m_tunnel.data(), SIGNAL(initialized()), SLOT(handleInitialized()));
connect(m_tunnel.data(), SIGNAL(error(QString)), SLOT(handleTunnelError(QString)));
connect(m_tunnel.data(), SIGNAL(readyRead()), SLOT(handleServerData()));
@@ -108,7 +109,7 @@ void Tunnel::handleServerData()
if (m_dataReceivedFromServer == ServerDataPrefix + TestData) {
std::cout << "Data exchange successful. Closing server socket..." << std::endl;
m_expectingChannelClose = true;
- m_tunnelSocket->close();
+ m_targetSocket->close();
}
}
@@ -132,27 +133,27 @@ void Tunnel::handleTunnelClosed()
void Tunnel::handleNewConnection()
{
- m_tunnelSocket = m_tunnelServer->nextPendingConnection();
- m_tunnelServer->close();
- connect(m_tunnelSocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(handleSocketError()));
- connect(m_tunnelSocket, SIGNAL(readyRead()), SLOT(handleClientData()));
+ m_targetSocket = m_targetServer->nextPendingConnection();
+ m_targetServer->close();
+ connect(m_targetSocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(handleSocketError()));
+ connect(m_targetSocket, SIGNAL(readyRead()), SLOT(handleClientData()));
handleClientData();
}
void Tunnel::handleSocketError()
{
- std::cerr << "Socket error: " << m_tunnelSocket->errorString().toLocal8Bit().constData()
+ std::cerr << "Socket error: " << m_targetSocket->errorString().toLocal8Bit().constData()
<< std::endl;
qApp->exit(EXIT_FAILURE);
}
void Tunnel::handleClientData()
{
- m_dataReceivedFromClient += m_tunnelSocket->readAll();
+ m_dataReceivedFromClient += m_targetSocket->readAll();
if (m_dataReceivedFromClient == TestData) {
std::cout << "Client data successfully received by server, now sending data to client..."
<< std::endl;
- m_tunnelSocket->write(ServerDataPrefix + m_dataReceivedFromClient);
+ m_targetSocket->write(ServerDataPrefix + m_dataReceivedFromClient);
}
}
diff --git a/tests/manual/ssh/tunnel/tunnel.h b/tests/manual/ssh/tunnel/tunnel.h
index 0036850acd9..daaa65766c1 100644
--- a/tests/manual/ssh/tunnel/tunnel.h
+++ b/tests/manual/ssh/tunnel/tunnel.h
@@ -68,9 +68,9 @@ private slots:
private:
QSsh::SshConnection * const m_connection;
QSharedPointer m_tunnel;
- QTcpServer * const m_tunnelServer;
- QTcpSocket *m_tunnelSocket;
- quint16 m_forwardedPort;
+ QTcpServer * const m_targetServer;
+ QTcpSocket *m_targetSocket;
+ quint16 m_targetPort;
QByteArray m_dataReceivedFromServer;
QByteArray m_dataReceivedFromClient;
bool m_expectingChannelClose;