Revision control
Copy as Markdown
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QTranslator>
namespace Outer {
namespace Inner {
namespace Deep {
class MyClass
{
public:
static int getValue() { return 42; }
static int count;
};
} // namespace Deep
} // namespace Inner
} // namespace Outer
template <typename T>
class TemplateClass
{
public:
static T value;
static int getCount() { return 10; }
};
template <typename T, typename U>
class DoubleTemplate
{
public:
static int getValue() { return 20; }
};
class Dialog
{
public:
static int getCount() { return 5; }
int value;
int getValue() { return 42; }
};
int func()
{
QTranslator trans;
int n = 5;
int array[5] = { 1, 2, 3, 4, 5 };
Dialog obj;
int *intPtr = &n;
// Parenthesized expressions
trans.translate("Context", "Single parens around identifier", "comment", (n));
trans.translate("Context", "Double parens", "comment", ((n)));
trans.translate("Context", "Triple parens", "comment", (((n))));
trans.translate("Context", "Many nested parens", "comment", ((((((n)))))));
trans.translate("Context", "Parens around number", "comment", (42));
trans.translate("Context", "Parens around expression", "comment", (n + 1));
trans.translate("Context", "Parens around complex expr", "comment", (n * 2 + 3));
trans.translate("Context", "Parens with operators", "comment", ((n + 1) * (n - 1)));
trans.translate("Context", "Nested parens with operators", "comment", (n + 1) * (n - 1));
trans.translate("Context", "Empty parens case", "comment", (int)n);
// Scope resolution operator ::
trans.translate("Context", "Simple scope resolution", "comment", Dialog::getCount());
trans.translate("Context", "Nested namespace scope", "comment",
Outer::Inner::Deep::MyClass::getValue());
trans.translate("Context", "Scope with static member", "comment",
Outer::Inner::Deep::MyClass::count);
trans.translate("Context", "Global scope", "comment", ::Dialog::getCount());
trans.translate("Context", "Long scope chain", "comment",
Outer::Inner::Deep::MyClass::getValue());
// Combined: Scope resolution + Parentheses
trans.translate("Context", "Parens around scope resolution", "comment", (Dialog::getCount()));
trans.translate("Context", "Double parens around scope", "comment",
((Outer::Inner::Deep::MyClass::getValue())));
trans.translate("Context", "Scope in paren expr", "comment", (Dialog::getCount() + 1));
// Templates (angle brackets)
trans.translate("Context", "Simple template", "comment", TemplateClass<int>::getCount());
trans.translate("Context", "Template with scope", "comment", TemplateClass<Dialog>::getCount());
trans.translate("Context", "Double template", "comment",
DoubleTemplate<int, double>::getValue());
trans.translate("Context", "Nested template", "comment",
TemplateClass<TemplateClass<int>>::getCount());
trans.translate("Context", "Template with parens", "comment", (TemplateClass<int>::getCount()));
// Cast expressions
trans.translate("Context", "static_cast with scope resolution", "comment",
static_cast<long>(Dialog::getCount()));
trans.translate("Context", "static_cast in parens", "comment", (static_cast<int>(n)));
Dialog *dptr = nullptr;
trans.translate("Context", "reinterpret_cast", "comment", reinterpret_cast<long>(dptr));
const int *cptr = &n;
trans.translate("Context", "const_cast", "comment", *const_cast<int *>(cptr));
trans.translate("Context", "C-style cast", "comment", (int)Dialog::getCount());
trans.translate("Context", "Functional cast", "comment", int(Dialog::getCount()));
// Combinations
trans.translate("Context", "Triple combo", "comment",
static_cast<long>(TemplateClass<int>::getCount()));
trans.translate("Context", "Nested cast with scope", "comment",
static_cast<int>(static_cast<long>(Dialog::getCount())));
trans.translate("Context", "Template with multi-scope", "comment",
TemplateClass<Outer::Inner::Deep::MyClass>::getCount());
trans.translate("Context", "Parens around cast with template", "comment",
(static_cast<long>(TemplateClass<int>::getCount())));
trans.translate("Context", "Double nested template", "comment",
DoubleTemplate<TemplateClass<int>, Dialog>::getValue());
trans.translate("Context", "Mixed angle and scope", "comment",
TemplateClass<Outer::Inner::Deep::MyClass>::getCount());
// Arrow operator
Dialog *ptr = nullptr;
trans.translate("Context", "Arrow operator", "comment", ptr->getCount());
trans.translate("Context", "Arrow with scope", "comment",
Outer::Inner::Deep::MyClass::getValue());
trans.translate("Context", "Parens around arrow", "comment", (ptr->getCount()));
// Comparison operators
trans.translate("Context", "Greater than", "comment", (n > 5));
trans.translate("Context", "Less than", "comment", (n < 5));
trans.translate("Context", "Greater or equal", "comment", (n >= 5));
trans.translate("Context", "Less or equal", "comment", (n <= 5));
trans.translate("Context", "Equal", "comment", (n == 5));
trans.translate("Context", "Not equal", "comment", (n != 5));
// Array subscripts
trans.translate("Context", "Array subscript", "comment", array[0]);
trans.translate("Context", "Array with expression 1", "comment", array[0] * 2);
trans.translate("Context", "Array with expression 2", "comment", array[n - 5]);
// Dot operator
trans.translate("Context", "Dot operator", "comment", obj.getValue());
trans.translate("Context", "Dot member access", "comment", obj.value);
// Unary operators
trans.translate("Context", "Dereference", "comment", *intPtr);
trans.translate("Context", "Address of", "comment", (long)&n);
trans.translate("Context", "Logical not", "comment", !n);
trans.translate("Context", "Bitwise not", "comment", ~n);
trans.translate("Context", "Unary minus", "comment", -n);
trans.translate("Context", "Unary plus", "comment", +n);
// More binary operators
trans.translate("Context", "Division", "comment", (n / 2));
trans.translate("Context", "Modulo", "comment", (n % 3));
trans.translate("Context", "Bitwise AND", "comment", (n & 0xFF));
trans.translate("Context", "Bitwise OR", "comment", (n | 0xFF));
trans.translate("Context", "Bitwise XOR", "comment", (n ^ 0xFF));
trans.translate("Context", "Bitwise right shift", "comment", (n >> 2));
// Logical operators
trans.translate("Context", "Logical AND", "comment", (n && 5));
trans.translate("Context", "Logical OR", "comment", (n || 5));
// Special cases
trans.translate("Context", "Ternary operator", "comment", (n > 0 ? n : 0));
trans.translate("Context", "Bitwise left shift", "comment", (n << 1));
return 0;
}