mcpField
Q
qt6-desktop-ux

qt6-desktop-ux

github.com/bartoszwarzocha设计与 UI0119 次安装3 天前更新
代码仓库

关于 qt6-desktop-ux

qt6-desktop-ux 是面向 Qt6 桌面界面开发者的参考技能,提供常见控件、布局、无障碍和主题处理模式,并引导使用 Context7 查询 Qt6 文档。

主要功能

  1. 01可停靠面板模式
  2. 02布局间距与尺寸指引
  3. 03对话框和工具栏示例
  4. 04无障碍与 Tab 顺序指引
  5. 05主题变更集成
  6. 06通过 Context7 查询 Qt6 文档

适用场景

  1. 01构建导航器或属性面板
  2. 02安排响应式 Qt6 表单和对话框
  3. 03添加无障碍控件与键盘导航
  4. 04查询 Qt6 API 和信号

MCP 相关

该技能展示如何使用 Context7 MCP 解析 Qt6 库 ID,并按主题查询文档。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bartoszwarzocha/kalahari --skill qt6-desktop-ux

安装后在 Claude Code 中输入/qt6-desktop-ux确认已加载。

详细介绍

Qt6 桌面 UX 模式

1. QDockWidget(可停靠面板)

适用场景
  • 导航器面板
  • 属性面板
  • 日志面板
  • 任意侧边面板
模式
QDockWidget* dock = new QDockWidget(tr("Panel Title"), parent);
dock->setObjectName("uniquePanelName");  // for state persistence
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
dock->setFeatures(QDockWidget::DockWidgetMovable |
                  QDockWidget::DockWidgetClosable |
                  QDockWidget::DockWidgetFloatable);

QWidget* content = new QWidget();
// ... setup content layout
dock->setWidget(content);

parent->addDockWidget(Qt::RightDockWidgetArea, dock);

2. QGroupBox(视觉分组)

适用场景
  • 将相关控件分组
  • 设置分区
  • 表单分区
模式
QGroupBox* group = new QGroupBox(tr("Section Title"));
QVBoxLayout* groupLayout = new QVBoxLayout(group);

// Add controls to groupLayout
groupLayout->addWidget(control1);
groupLayout->addWidget(control2);

// Add group to parent layout
mainLayout->addWidget(group);

3. 间距和边距

标准值
  • 控件之间:6px
  • 分组边距:11px
  • 对话框边距:11px
模式
layout->setSpacing(6);
layout->setContentsMargins(11, 11, 11, 11);

4. QSizePolicy

策略
策略行为
Fixed固定大小,不拉伸
Preferred首选大小,可缩小或放大
Expanding填满可用空间
Minimum不小于最小大小
Maximum不超过最大大小
模式
widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

5. 拉伸因子

在布局中
layout->addWidget(widget1, 0);  // fixed
layout->addWidget(widget2, 1);  // fills remaining space
layout->addStretch(1);          // spacer that expands

6. QDialog(模态窗口)

模式
class MyDialog : public QDialog {
    Q_OBJECT
public:
    explicit MyDialog(QWidget* parent = nullptr);

private:
    void setupUI();
    void createConnections();

    // Controls as members
    QLineEdit* m_nameEdit;
    QDialogButtonBox* m_buttonBox;
};

MyDialog::MyDialog(QWidget* parent)
    : QDialog(parent)
{
    setWindowTitle(tr("Dialog Title"));
    setupUI();
    createConnections();
}

void MyDialog::setupUI() {
    QVBoxLayout* mainLayout = new QVBoxLayout(this);

    // Content
    m_nameEdit = new QLineEdit();
    mainLayout->addWidget(m_nameEdit);

    // Standard buttons
    m_buttonBox = new QDialogButtonBox(
        QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    mainLayout->addWidget(m_buttonBox);
}

void MyDialog::createConnections() {
    connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
    connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
}

7. 无障碍访问

所有控件都必须满足
widget->setToolTip(tr("Descriptive tooltip"));
widget->setWhatsThis(tr("Detailed help text"));
widget->setAccessibleName(tr("Name for screen readers"));
Tab 顺序
setTabOrder(widget1, widget2);
setTabOrder(widget2, widget3);

8. 响应式设计

最小尺寸
widget->setMinimumWidth(200);
widget->setMinimumHeight(100);
最大尺寸(需要时)
widget->setMaximumWidth(400);

9. QToolBar

模式
QToolBar* toolbar = new QToolBar(tr("Main Toolbar"), parent);
toolbar->setObjectName("mainToolbar");
toolbar->setMovable(true);
toolbar->setIconSize(QSize(24, 24));

// Add actions (use ArtProvider!)
QAction* action = core::ArtProvider::getInstance().createAction("file.new", tr("New"), toolbar);
toolbar->addAction(action);
toolbar->addSeparator();

10. 主题集成

连接主题更改
connect(&core::ThemeManager::getInstance(), &core::ThemeManager::themeChanged,
        this, &MyWidget::onThemeChanged);

void MyWidget::onThemeChanged() {
    // Update colors, refresh UI
    update();
}
添加新的主题颜色

当组件需要新的自定义颜色时,请使用自动化脚本:

python scripts/add_theme_color.py colorName "#darkHex" "#lightHex" -d "description" -s

完整文档请参阅 kalahari-coding 技能。

11. Qt6 文档(Context7 MCP)

不确定 Qt6 API、信号、槽或属性时,务必先查阅 Context7:

步骤 1:解析 Qt6 库 ID(每个会话一次)
mcp__context7__resolve-library-id("Qt6")

返回:/qt/qtdoc 或类似内容

步骤 2:获取特定主题的文档
mcp__context7__query-docs(
    context7CompatibleLibraryID="/qt/qtdoc",
    topic="QDockWidget"
)
常见的 Qt6 查询主题:
主题适用场景
QDockWidget创建可停靠面板
QDialog模态对话框
QLayout布局管理
QSizePolicy控件尺寸行为
signals slots信号/槽连接
QToolBar创建工具栏
QAction动作/命令模式
QStyle样式和主题
适用 Context7 的场景:
  • ✅ 不确定方法参数
  • ✅ 需要了解可用的信号/槽
  • ✅ 查找 Qt6 专属模式
  • ✅ 检查弃用状态

评论

支持 Markdown