1. 基础符号对比表
符号/语法 | C++ (Qt) | Java | JavaScript | 解释 |
---|---|---|---|---|
输出调试信息 | qDebug() << "Hi" << 123; |
System.out.println("Hi" + 123); |
console.log("Hi", 123); |
Qt 用 << 流式输出 |
字符串格式化 | QString("Name: %1").arg(name); |
String.format("Name: %s", name); |
`Name: ${name}` |
%1 是占位符,arg() 替换 |
信号(事件) | emit signalName(data); |
listener.onEvent(data); |
dispatchEvent(new Event(data)); |
Qt 的信号槽机制 |
Lambda 函数 | [=]() { qDebug() << x; } |
() -> System.out.println(x); |
() => console.log(x); |
[=] 表示捕获外部变量 |
空指针 | nullptr |
null |
null 或 undefined |
C++11 引入的更安全的空指针 |
作用域解析 | :: (如 ClassName::method() ) |
. (如 ClassName.method() ) |
. (如 ClassName.method() ) |
C++ 用 :: 访问类/命名空间成员 |
2. 特殊符号详解
(1) ->
(成员访问指针)
- C++:用于访问 指针对象的成员。
QPushButton *button = new QPushButton;
button->setText("Click"); // 相当于 Java/JS 的 button.setText()
- 对比 Java/JS:
// Java
Button button = new Button();
button.setText("Click");
// JavaScript
const button = new Button();
button.setText("Click");
(2) &
(引用/取地址)
- C++:
- 引用(类似 Java 的“别名”):
int a = 10; int &ref = a; // ref 是 a 的引用 ref = 20; // 现在 a = 20
- 取地址(获取变量内存地址):
int* ptr = &a; // ptr 存储 a 的内存地址
- Java/JS:没有直接对应的概念(Java 的引用是隐式的,JS 变量本身就是引用)。
(3) *
(指针/解引用)
- C++:
- 声明指针:
int *p; // p 是一个指向 int 的指针
- 解引用(获取指针指向的值):
int a = 10; int *p = &a; int b = *p; // b = 10
- Java/JS:没有指针,直接用对象引用。
(4) ::
(作用域解析)
- C++:访问 类静态成员 或 命名空间。
class MyClass {
public:
static void foo();
};
MyClass::foo(); // 调用静态方法
- Java/JS:直接用
.
:
// Java
MyClass.foo();
// JavaScript
MyClass.foo();
(5) []
(数组/Lambda 捕获)
- C++:
- 数组:
int arr[3] = {1, 2, 3}; int x = arr[0]; // x = 1
- Lambda 捕获:
int a = 10; auto func = [=]() { qDebug() << a; }; // [=] 表示按值捕获
- Java/JS:
// Java
int[] arr = {1, 2, 3};
int x = arr[0];
// JavaScript
const arr = [1, 2, 3];
const x = arr[0];
3. 常见 Qt 特有符号
符号/语法 | 解释 | Java/JS 类似概念 |
---|---|---|
SIGNAL() / SLOT() |
Qt4 的信号槽连接语法(旧版) | addEventListener() (JS) |
Q_OBJECT |
宏,表示该类支持信号槽 | 无直接对应 |
Q_INVOKABLE |
标记方法可被 QML 调用 | @Exposed 注解(JavaFX) |
Q_PROPERTY |
定义 QML 可访问的属性 | @FXML 属性绑定(JavaFX) |
4. 快速记忆技巧
-
<<
→ 想象成console.log()
的,
或 Java 的+
拼接。 -
->
→ 和 Java/JS 的.
一样,但用于指针。 -
&
和*
→ 记住&
是“取地址”,*
是“解引用”。 -
::
→ 类似 Java 的.
,但用于类/命名空间。 -
emit
→ 就当它是 JS 的dispatchEvent()
或 Java 的listener.call()
。