Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I6472cd72b27c69257efe54376e428274ebf68050
This commit is contained in:
commit
9a1e4ffa66
|
@ -0,0 +1,89 @@
|
|||
Qt 5.12.5 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.12.0 through 5.12.4.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
https://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.12 series is binary compatible with the 5.11.x series.
|
||||
Applications compiled for 5.11 will continue to run with 5.12.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-76871] TapHandler.point now holds the release position while the
|
||||
tapped() signal is emitted.
|
||||
|
||||
****************************************************************************
|
||||
* QtQml *
|
||||
****************************************************************************
|
||||
|
||||
- [QTBUG-76018] Readonly QML properties can now be templates such as
|
||||
list<...>.
|
||||
- [QTBUG-76085] QQmlApplication engine now automatically loads translation
|
||||
files from resource directories.
|
||||
- [QTBUG-75939] Instances of QJSValue can now safely be passed between
|
||||
threads and destroyed in a different thread.
|
||||
- [QTBUG-75642] Fixed an invalid memory read caused by the JIT compiler.
|
||||
- [QTBUG-71387] Fixed a use-after-free condition caused by calling
|
||||
qmlClearTypeRegistrations().
|
||||
- [QTBUG-76656] Made sure JavaScript "this" points to the right object when
|
||||
calling scope and context properties through lookups.
|
||||
- [QTBUG-76796] Fixed bindings to typeof(<name>) to get re-evaluated when
|
||||
<name> gets defined.
|
||||
- [QTBUG-55407] Avoid invalid memory access when calling setData() on a
|
||||
QQmlComponent constructed without an engine.
|
||||
- [QTBUG-76441] Fixed importing "qrc:/" (with exactly one slash).
|
||||
- [QTBUG-71329] Implemented the missing bits of JavaScript promise chains.
|
||||
- [QTBUG-75983] Fixed null pointer dereference in QQmlXmlHttpRequest.
|
||||
- [QTBUG-77012] Fixed static build issue: multiple definitions of
|
||||
qtPositionAttributeName().
|
||||
- [QTBUG-77102] The component versioning is not enforced when loading
|
||||
singletons.
|
||||
|
||||
****************************************************************************
|
||||
* QtQuick *
|
||||
****************************************************************************
|
||||
|
||||
- Item Views:
|
||||
* [QTBUG-76487] We now properly populate delegates with the populate
|
||||
transition when the view is resized after componentComplete.
|
||||
* [QTBUG-31677] A ListView footer is now positioned correctly after the
|
||||
last item is removed.
|
||||
* [QTBUG-76433][QTBUG-44308] Fixed a crash while doing fast flicking in
|
||||
transitions that use Animators.
|
||||
* [QTBUG-76254] Fixed a crash in QQmlDelegateModel.
|
||||
|
||||
- Input:
|
||||
* [QTBUG-75399] Fixed a crash when using the KeyNavigation attached property.
|
||||
* [QTBUG-76875] DragHandler now respects acceptedButtons.
|
||||
* [QTBUG-71218] If a Controls 2 Button has a DragHandler, the button is
|
||||
now released when the drag begins.
|
||||
|
||||
- Scene graph:
|
||||
* [QTBUG-76603] qmlscene now sets the default surface format earlier
|
||||
and correctly.
|
||||
* [QTBUG-68566] Fixed rendering freeze when using software rendering
|
||||
of WebEngine in QQuickWidget.
|
||||
* [QTBUG-66810] Software rendering: repaint everything when moving
|
||||
between HiDpi and lower-resolution screens.
|
||||
|
||||
- Text:
|
||||
* [QTBUG-77217] Fixed a bug where aligning an image to "top" or "bottom"
|
||||
could cause a crash under certain circumstances.
|
||||
* [QTBUG-76528] Fixed missing glyphs and in some cases crashes when
|
||||
displaying many characters from the same font on a system with a
|
||||
low maximum texture size.
|
||||
* [QTBUG-76528] Fixed a bug when displaying many characters from the same
|
||||
font on a system with a low maximum texture size.
|
||||
* [QTBUG-74761] Added support for text color when using color fonts.
|
|
@ -621,9 +621,9 @@ public:
|
|||
|
||||
loadPtr(exceptionHandlerAddress(), ScratchRegister);
|
||||
Jump exitFunction = branchPtr(Equal, ScratchRegister, TrustedImmPtr(0));
|
||||
loadUndefined();
|
||||
jump(ScratchRegister);
|
||||
exitFunction.link(this);
|
||||
loadUndefined();
|
||||
|
||||
if (functionExit.isSet())
|
||||
jump(functionExit);
|
||||
|
|
|
@ -1479,6 +1479,12 @@ void BaselineAssembler::saveAccumulatorInFrame()
|
|||
offsetof(CallData, accumulator)));
|
||||
}
|
||||
|
||||
void BaselineAssembler::loadAccumulatorFromFrame()
|
||||
{
|
||||
pasm()->loadAccumulator(PlatformAssembler::Address(PlatformAssembler::JSStackFrameRegister,
|
||||
offsetof(CallData, accumulator)));
|
||||
}
|
||||
|
||||
static ReturnedValue TheJitIs__Tail_Calling__ToTheRuntimeSoTheJitFrameIsMissing(CppStackFrame *frame, ExecutionEngine *engine)
|
||||
{
|
||||
return Runtime::method_tailCall(frame, engine);
|
||||
|
@ -1606,7 +1612,6 @@ void BaselineAssembler::deadTemporalZoneCheck(int offsetForSavedIP, int variable
|
|||
{
|
||||
auto valueIsAliveJump = pasm()->jumpNotEmpty();
|
||||
storeInstructionPointer(offsetForSavedIP);
|
||||
saveAccumulatorInFrame();
|
||||
prepareCallWithArgCount(2);
|
||||
passInt32AsArg(variableName, 1);
|
||||
passEngineAsArg(0);
|
||||
|
|
|
@ -153,6 +153,7 @@ public:
|
|||
void passPointerAsArg(void *ptr, int arg);
|
||||
void callRuntime(const char *functionName, const void *funcPtr, CallResultDestination dest);
|
||||
void saveAccumulatorInFrame();
|
||||
void loadAccumulatorFromFrame();
|
||||
void jsTailCall(int func, int thisObject, int argc, int argv);
|
||||
|
||||
// exception/context stuff
|
||||
|
|
|
@ -77,6 +77,7 @@ void BaselineJIT::generate()
|
|||
|
||||
#define STORE_IP() as->storeInstructionPointer(nextInstructionOffset())
|
||||
#define STORE_ACC() as->saveAccumulatorInFrame()
|
||||
#define LOAD_ACC() as->loadAccumulatorFromFrame()
|
||||
#define BASELINEJIT_GENERATE_RUNTIME_CALL(function, destination) \
|
||||
as->GENERATE_RUNTIME_CALL(function, destination)
|
||||
#define BASELINEJIT_GENERATE_TAIL_CALL(function) \
|
||||
|
@ -235,6 +236,7 @@ void BaselineJIT::generate_StoreNameSloppy(int name)
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeNameSloppy, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_StoreNameStrict(int name)
|
||||
|
@ -247,6 +249,7 @@ void BaselineJIT::generate_StoreNameStrict(int name)
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeNameStrict, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_LoadElement(int base, int /*traceSlot*/)
|
||||
|
@ -272,6 +275,7 @@ void BaselineJIT::generate_StoreElement(int base, int index, int /*traceSlot*/)
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeElement, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_LoadProperty(int name, int /*traceSlot*/)
|
||||
|
@ -310,6 +314,7 @@ void BaselineJIT::generate_StoreProperty(int name, int base)
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeProperty, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_SetLookup(int index, int base)
|
||||
|
@ -329,7 +334,6 @@ void BaselineJIT::generate_SetLookup(int index, int base)
|
|||
void BaselineJIT::generate_LoadSuperProperty(int property)
|
||||
{
|
||||
STORE_IP();
|
||||
STORE_ACC();
|
||||
as->prepareCallWithArgCount(2);
|
||||
as->passJSSlotAsArg(property, 1);
|
||||
as->passEngineAsArg(0);
|
||||
|
@ -347,6 +351,7 @@ void BaselineJIT::generate_StoreSuperProperty(int property)
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_storeSuperProperty, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_Yield()
|
||||
|
@ -592,6 +597,7 @@ void BaselineJIT::generate_PushBlockContext(int index)
|
|||
as->passInt32AsArg(index, 1);
|
||||
as->passJSSlotAsArg(0, 0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::pushBlockContext, CallResultDestination::Ignore);
|
||||
as->loadAccumulatorFromFrame();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_CloneBlockContext()
|
||||
|
@ -600,6 +606,7 @@ void BaselineJIT::generate_CloneBlockContext()
|
|||
as->prepareCallWithArgCount(1);
|
||||
as->passJSSlotAsArg(CallData::Context, 0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::cloneBlockContext, CallResultDestination::Ignore);
|
||||
as->loadAccumulatorFromFrame();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_PushScriptContext(int index)
|
||||
|
@ -610,6 +617,7 @@ void BaselineJIT::generate_PushScriptContext(int index)
|
|||
as->passEngineAsArg(1);
|
||||
as->passJSSlotAsArg(0, 0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::pushScriptContext, CallResultDestination::Ignore);
|
||||
as->loadAccumulatorFromFrame();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_PopScriptContext()
|
||||
|
@ -619,6 +627,7 @@ void BaselineJIT::generate_PopScriptContext()
|
|||
as->passEngineAsArg(1);
|
||||
as->passJSSlotAsArg(0, 0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::popScriptContext, CallResultDestination::Ignore);
|
||||
as->loadAccumulatorFromFrame();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_PopContext() { as->popContext(); }
|
||||
|
@ -719,11 +728,13 @@ void BaselineJIT::generate_TypeofValue()
|
|||
|
||||
void BaselineJIT::generate_DeclareVar(int varName, int isDeletable)
|
||||
{
|
||||
STORE_ACC();
|
||||
as->prepareCallWithArgCount(3);
|
||||
as->passInt32AsArg(varName, 2);
|
||||
as->passInt32AsArg(isDeletable, 1);
|
||||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Runtime::method_declareVar, CallResultDestination::Ignore);
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_DefineArray(int argc, int args)
|
||||
|
@ -781,11 +792,13 @@ void BaselineJIT::generate_CreateRestParameter(int argIndex)
|
|||
|
||||
void BaselineJIT::generate_ConvertThisToObject()
|
||||
{
|
||||
STORE_ACC();
|
||||
as->prepareCallWithArgCount(2);
|
||||
as->passJSSlotAsArg(CallData::This, 1);
|
||||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::convertThisToObject, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_LoadSuperConstructor()
|
||||
|
@ -931,6 +944,7 @@ void BaselineJIT::generate_ThrowOnNullOrUndefined()
|
|||
as->passEngineAsArg(0);
|
||||
BASELINEJIT_GENERATE_RUNTIME_CALL(Helpers::throwOnNullOrUndefined, CallResultDestination::Ignore);
|
||||
as->checkException();
|
||||
LOAD_ACC();
|
||||
}
|
||||
|
||||
void BaselineJIT::generate_GetTemplateObject(int index)
|
||||
|
|
|
@ -727,7 +727,6 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
|
|||
|
||||
MOTH_BEGIN_INSTR(LoadSuperProperty)
|
||||
STORE_IP();
|
||||
STORE_ACC();
|
||||
acc = Runtime::method_loadSuperProperty(engine, STACK_VALUE(property));
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(LoadSuperProperty)
|
||||
|
@ -884,12 +883,14 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
|
|||
|
||||
MOTH_BEGIN_INSTR(Construct)
|
||||
STORE_IP();
|
||||
STORE_ACC();
|
||||
acc = Runtime::method_construct(engine, STACK_VALUE(func), ACC, stack + argv, argc);
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(Construct)
|
||||
|
||||
MOTH_BEGIN_INSTR(ConstructWithSpread)
|
||||
STORE_IP();
|
||||
STORE_ACC();
|
||||
acc = Runtime::method_constructWithSpread(engine, STACK_VALUE(func), ACC, stack + argv, argc);
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(ConstructWithSpread)
|
||||
|
@ -917,7 +918,6 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
|
|||
MOTH_BEGIN_INSTR(DeadTemporalZoneCheck)
|
||||
if (ACC.isEmpty()) {
|
||||
STORE_IP();
|
||||
STORE_ACC();
|
||||
Runtime::method_throwReferenceError(engine, name);
|
||||
goto handleUnwind;
|
||||
}
|
||||
|
@ -1086,6 +1086,7 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
|
|||
if (t->isNullOrUndefined()) {
|
||||
*t = engine->globalObject->asReturnedValue();
|
||||
} else {
|
||||
STORE_ACC();
|
||||
*t = t->toObject(engine)->asReturnedValue();
|
||||
CHECK_EXCEPTION;
|
||||
}
|
||||
|
@ -1098,6 +1099,7 @@ QV4::ReturnedValue VME::interpret(CppStackFrame *frame, ExecutionEngine *engine,
|
|||
MOTH_END_INSTR(LoadSuperConstructor)
|
||||
|
||||
MOTH_BEGIN_INSTR(ToObject)
|
||||
STORE_ACC();
|
||||
acc = ACC.toObject(engine)->asReturnedValue();
|
||||
CHECK_EXCEPTION;
|
||||
MOTH_END_INSTR(ToObject)
|
||||
|
|
|
@ -238,12 +238,11 @@ void StringLiteral::accept0(Visitor *visitor)
|
|||
|
||||
void TemplateLiteral::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
if (next)
|
||||
accept(next, visitor);
|
||||
bool accepted = true;
|
||||
for (TemplateLiteral *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void NumericLiteral::accept0(Visitor *visitor)
|
||||
|
@ -1013,13 +1012,13 @@ QStringList FormalParameterList::boundNames() const
|
|||
|
||||
void FormalParameterList::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
accept(element, visitor);
|
||||
if (next)
|
||||
accept(next, visitor);
|
||||
bool accepted = true;
|
||||
for (FormalParameterList *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
if (accepted)
|
||||
accept(it->element, visitor);
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
FormalParameterList *FormalParameterList::finish(QQmlJS::MemoryPool *pool)
|
||||
|
@ -1290,12 +1289,14 @@ void UiPragma::accept0(Visitor *visitor)
|
|||
|
||||
void UiHeaderItemList::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
accept(headerItem, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
bool accepted = true;
|
||||
for (UiHeaderItemList *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
if (accepted)
|
||||
accept(it->headerItem, visitor);
|
||||
|
||||
visitor->endVisit(this);
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1359,14 +1360,15 @@ void PatternElement::boundNames(QStringList *names)
|
|||
|
||||
void PatternElementList::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
accept(elision, visitor);
|
||||
accept(element, visitor);
|
||||
if (next)
|
||||
accept(next, visitor);
|
||||
bool accepted = true;
|
||||
for (PatternElementList *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
if (accepted) {
|
||||
accept(it->elision, visitor);
|
||||
accept(it->element, visitor);
|
||||
}
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void PatternElementList::boundNames(QStringList *names)
|
||||
|
@ -1395,13 +1397,13 @@ void PatternProperty::boundNames(QStringList *names)
|
|||
|
||||
void PatternPropertyList::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
accept(property, visitor);
|
||||
if (next)
|
||||
accept(next, visitor);
|
||||
bool accepted = true;
|
||||
for (PatternPropertyList *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
if (accepted)
|
||||
accept(it->property, visitor);
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void PatternPropertyList::boundNames(QStringList *names)
|
||||
|
@ -1446,13 +1448,14 @@ void ClassDeclaration::accept0(Visitor *visitor)
|
|||
|
||||
void ClassElementList::accept0(Visitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
accept(property, visitor);
|
||||
if (next)
|
||||
accept(next, visitor);
|
||||
}
|
||||
bool accepted = true;
|
||||
for (ClassElementList *it = this; it && accepted; it = it->next) {
|
||||
accepted = visitor->visit(it);
|
||||
if (accepted)
|
||||
accept(it->property, visitor);
|
||||
|
||||
visitor->endVisit(this);
|
||||
visitor->endVisit(it);
|
||||
}
|
||||
}
|
||||
|
||||
ClassElementList *ClassElementList::finish()
|
||||
|
|
|
@ -781,8 +781,8 @@ void QQuickTextNodeEngine::addToSceneGraph(QQuickTextNode *parentNode,
|
|||
for (int i = 0; i < m_backgrounds.size(); ++i) {
|
||||
const QRectF &rect = m_backgrounds.at(i).first;
|
||||
const QColor &color = m_backgrounds.at(i).second;
|
||||
|
||||
parentNode->addRectangleNode(rect, color);
|
||||
if (color.alpha() != 0)
|
||||
parentNode->addRectangleNode(rect, color);
|
||||
}
|
||||
|
||||
// Add all text with unselected color first
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 6b0c42c63c2492bd0a7a96d3179d122b5f71793f
|
||||
Subproject commit 3c69133cc419840c1be34638039cd8c48a7ef581
|
|
@ -0,0 +1,16 @@
|
|||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
width: 200
|
||||
height: 200
|
||||
color: "white"
|
||||
Text {
|
||||
objectName: "text"
|
||||
textFormat: Text.RichText
|
||||
anchors.fill: parent
|
||||
color: "black"
|
||||
text: "<h1 style=\"background-color:rgba(255,255,255,0.00)\">foo</h1>"
|
||||
verticalAlignment: Text.AlignTop
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
}
|
|
@ -164,6 +164,8 @@ private slots:
|
|||
|
||||
void verticallyAlignedImageInTable();
|
||||
|
||||
void transparentBackground();
|
||||
|
||||
private:
|
||||
QStringList standard;
|
||||
QStringList richText;
|
||||
|
@ -4429,6 +4431,26 @@ void tst_qquicktext::verticallyAlignedImageInTable()
|
|||
// Don't crash
|
||||
}
|
||||
|
||||
void tst_qquicktext::transparentBackground()
|
||||
{
|
||||
if ((QGuiApplication::platformName() == QLatin1String("offscreen"))
|
||||
|| (QGuiApplication::platformName() == QLatin1String("minimal")))
|
||||
QSKIP("Skipping due to grabToImage not functional on offscreen/minimimal platforms");
|
||||
|
||||
QScopedPointer<QQuickView> window(new QQuickView);
|
||||
window->setSource(testFileUrl("transparentBackground.qml"));
|
||||
QTRY_COMPARE(window->status(), QQuickView::Ready);
|
||||
|
||||
window->show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(window.data()));
|
||||
QImage img = window->grabWindow();
|
||||
QCOMPARE(img.isNull(), false);
|
||||
|
||||
QColor color = img.pixelColor(0, 0);
|
||||
QCOMPARE(color.red(), 255);
|
||||
QCOMPARE(color.blue(), 255);
|
||||
QCOMPARE(color.green(), 255);
|
||||
}
|
||||
QTEST_MAIN(tst_qquicktext)
|
||||
|
||||
#include "tst_qquicktext.moc"
|
||||
|
|
Loading…
Reference in New Issue