TypePHP\Qt
指南
控件
深入
参考
FAQ
  • English
  • 简体中文
GitHub
指南
控件
深入
参考
FAQ
  • English
  • 简体中文
GitHub
  • 控件目录

    • 控件目录
    • 容器
    • 输入控件
    • 数据控件
    • 展示控件
    • WebView(内嵌网页)

展示控件

label —— 文本标签

WidgetTree::label(string $text, array $props = [])
属性说明
text文本
bold粗体
font_size字号(px)
alignleft right center
styleQSS 片段(更灵活)
WidgetTree::label('标题', ['id' => 'title', 'bold' => true, 'font_size' => 22]);
WidgetTree::label('副标题', ['id' => 'sub', 'style' => 'color:#666;font-style:italic;']);

事件:无(标签不交互)

动态文本

view() 每帧都会重新执行,所以直接把状态拼进字符串即可 —— 不需要"更新标签"这种操作:

WidgetTree::label('点击次数:' . $state['clicks'], ['id' => 'count'])

button —— 按钮

WidgetTree::button(string $text, array $props = [])
属性说明
text按钮文字
checkable可切换(按下/弹起)
checked切换状态
flat无边框
default默认按钮(回车触发)
enabled是否可点
WidgetTree::button('保存', ['id' => 'save', 'default' => true]);
WidgetTree::button('删除', ['id' => 'del', 'enabled' => $state->hasSelection()]);

事件:click

$app->on('save', 'click', function () use ($state) {
    $state->save();
});

可切换按钮发 toggle(和普通按钮一样也会发 press / release):

WidgetTree::button('加粗', ['id' => 'bold', 'checkable' => true, 'checked' => $state->bold]);

$app->on('bold', 'toggle', function (array $event) use ($state) {
    $state->bold = $event['value'] === '1';
});

progress —— 进度条

WidgetTree::progress(int $value = 0, array $props = [])
属性说明
value当前值
min / max范围(默认 0–100)
WidgetTree::progress($state->progress, ['id' => 'bar', 'max' => 100]);

事件:无(只显示)

热路径上更新用 patch() 更省:

$app->patch([['op' => 'set', 'id' => 'bar', 'props' => ['value' => 65]]]);

image —— 图片

WidgetTree::image(string $path, array $props = [])
属性说明
path图片路径
scaled_size缩放尺寸 [w, h]
WidgetTree::image('assets/logo.png', ['id' => 'logo', 'scaled_size' => [120, 120]]);

路径相对于可执行文件

相对路径按产物所在目录解析。所以 'assets/logo.png' 在开发目录和 dist/ 里都成立 —— 前提是打包时把 assets/ 一起拷过去(qtphp package 会做)。

link —— 链接

WidgetTree::link(string $text, string $href, array $props = [])
WidgetTree::link('项目主页', 'https://github.com/yangweijie/typephp-qt', ['id' => 'home']);

事件:click,value 是 href

$app->on('home', 'click', function (array $event) {
    // $event['value'] 是 href —— 打开浏览器需要桥接额外支持
    error_log('点击了 ' . $event['value']);
});

一屏示例

WidgetTree::vbox([
    WidgetTree::label('项目状态', ['id' => 'title', 'bold' => true, 'font_size' => 20]),

    WidgetTree::hbox([
        WidgetTree::image('assets/logo.png', ['id' => 'logo', 'scaled_size' => [48, 48]]),
        WidgetTree::vbox([
            WidgetTree::label($state->projectName, ['id' => 'name']),
            WidgetTree::link('查看源码', $state->repoUrl, ['id' => 'repo']),
        ], ['grow' => 1]),
    ]),

    WidgetTree::separator(),

    WidgetTree::label('构建进度:' . $state->progress . '%', ['id' => 'progress_label']),
    WidgetTree::progress($state->progress, ['id' => 'bar', 'max' => 100]),

    WidgetTree::hbox([
        WidgetTree::button('开始构建', ['id' => 'start', 'default' => true]),
        WidgetTree::button('取消', ['id' => 'cancel', 'enabled' => $state->running]),
        WidgetTree::spacer(1),
        WidgetTree::button('详细日志', ['id' => 'log', 'flat' => true]),
    ]),
]);
在 GitHub 上编辑此页
最后更新: 2026/10/6 03:13
Prev
数据控件
Next
WebView(内嵌网页)