Generate QML components with proper property bindings, signal/slot connections, and Qt Quick Controls integration
Generates QML components with proper property bindings, signal/slot connections, and Qt Quick Controls integration.
npx claudepluginhub a5c-ai/babysitterThis skill is limited to using the following tools:
README.mdGenerate QML components with proper property bindings, signal/slot connections, and Qt Quick Controls integration. This skill creates well-structured QML components following Qt best practices.
{
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Path to the Qt project"
},
"componentName": {
"type": "string",
"description": "Name of the QML component"
},
"componentType": {
"enum": ["item", "control", "popup", "view", "delegate", "singleton"],
"default": "item"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"type": { "type": "string" },
"defaultValue": { "type": "string" },
"readonly": { "type": "boolean" }
}
}
},
"signals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"parameters": { "type": "array" }
}
}
},
"cppBackend": {
"type": "boolean",
"description": "Generate C++ backend class",
"default": false
},
"useControls": {
"enum": ["none", "basic", "material", "universal", "fusion"],
"default": "basic"
}
},
"required": ["projectPath", "componentName"]
}
{
"type": "object",
"properties": {
"success": { "type": "boolean" },
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": { "type": "string" },
"type": { "enum": ["qml", "cpp", "cmake"] }
}
}
},
"registrationCode": {
"type": "string",
"description": "C++ code to register the component"
}
},
"required": ["success"]
}
// CustomButton.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
Control {
id: root
// Properties
property string text: ""
property color backgroundColor: "#2196F3"
property color textColor: "white"
property bool loading: false
readonly property bool pressed: mouseArea.pressed
// Signals
signal clicked()
signal pressAndHold()
// Size hints
implicitWidth: Math.max(implicitBackgroundWidth + leftPadding + rightPadding,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topPadding + bottomPadding,
implicitContentHeight + topPadding + bottomPadding)
padding: 12
// Background
background: Rectangle {
radius: 4
color: root.pressed ? Qt.darker(root.backgroundColor, 1.2) : root.backgroundColor
Behavior on color {
ColorAnimation { duration: 100 }
}
}
// Content
contentItem: RowLayout {
spacing: 8
BusyIndicator {
visible: root.loading
running: root.loading
Layout.preferredWidth: 20
Layout.preferredHeight: 20
}
Text {
text: root.text
color: root.textColor
font.pixelSize: 14
font.weight: Font.Medium
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
Layout.fillWidth: true
}
}
// Interaction
MouseArea {
id: mouseArea
anchors.fill: parent
enabled: !root.loading
onClicked: root.clicked()
onPressAndHold: root.pressAndHold()
}
}
// custombutton.h
#ifndef CUSTOMBUTTON_H
#define CUSTOMBUTTON_H
#include <QObject>
#include <QQmlEngine>
class CustomButtonBackend : public QObject
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
Q_PROPERTY(bool loading READ loading WRITE setLoading NOTIFY loadingChanged)
public:
explicit CustomButtonBackend(QObject *parent = nullptr);
QString text() const;
void setText(const QString &text);
bool loading() const;
void setLoading(bool loading);
signals:
void textChanged();
void loadingChanged();
void clicked();
public slots:
void handleClick();
private:
QString m_text;
bool m_loading = false;
};
#endif // CUSTOMBUTTON_H
qml/
├── MyComponents/
│ ├── qmldir
│ ├── CustomButton.qml
│ ├── CustomTextField.qml
│ └── CustomDialog.qml
└── main.qml
# qmldir
module MyComponents
CustomButton 1.0 CustomButton.qml
CustomTextField 1.0 CustomTextField.qml
CustomDialog 1.0 CustomDialog.qml
qt_add_qml_module(myapp
URI MyComponents
VERSION 1.0
QML_FILES
qml/MyComponents/CustomButton.qml
qml/MyComponents/CustomTextField.qml
SOURCES
src/custombutton.cpp
src/custombutton.h
)
// UserListView.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
ListView {
id: root
property alias model: root.model
signal itemSelected(int index, var data)
clip: true
spacing: 4
delegate: ItemDelegate {
width: ListView.view.width
height: 60
contentItem: Row {
spacing: 12
Image {
source: model.avatar
width: 48
height: 48
fillMode: Image.PreserveAspectCrop
}
Column {
anchors.verticalCenter: parent.verticalCenter
Text {
text: model.name
font.bold: true
}
Text {
text: model.email
color: "gray"
font.pixelSize: 12
}
}
}
onClicked: root.itemSelected(index, model)
}
ScrollBar.vertical: ScrollBar {}
}
qt-cmake-project-generator - Project setupqt-translation-workflow - Internationalizationqt-widget-accessibility-audit - Accessibilityqt-cpp-specialist - Qt/C++ expertisedesktop-ux-analyst - UX reviewActivates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.