Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate QML components with proper property bindings, signal/slot connections, and Qt Quick Controls integration
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 152% | 0% |
Generate 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.
json{ "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"] }
json{ "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"] }
qml// 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() } }
cpp// 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.qmlcmakeqt_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 )
qml// 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 reviewOther measured skills in the registry, with their headline benchmark lift.