[Qt-interest] QML signal connections
Carl Snellman
carl.snellman at gmail.com
Wed Aug 18 20:17:23 CEST 2010
Oh, wasn't aware of such list...
Reposting.
Thanks!
Carl
On Wed, Aug 18, 2010 at 11:14 AM, Jason H <scorp1us at yahoo.com> wrote:
> you also might want to try the QML list...
>
>
>
> ----- Original Message ----
> From: Carl Snellman <carl.snellman at gmail.com>
> To: Qt Interest <Qt-interest at trolltech.com>
> Sent: Wed, August 18, 2010 2:32:58 AM
> Subject: [Qt-interest] QML signal connections
>
> Hey,
>
> I'm trying to use QML with C++ to create the GUI for my application,
> but I bumped to a problem I havent' been able to solve after a day of
> studying/trying.
>
> I created a button in QML, and I'd like to connect its signal to a C++
> class slot so that I get to react to the button press; Just like you
> would connect QPushButton. However, I cannot figure out how to make
> this connection. I tried to find the child object, but always return
> null, so I cannot connect that way. I dont know how I would make the
> connection in the QML file side (if it is possible)
>
> I attached minimal app below to demonstrate what I've tried.
> Any help is greatly appreciated!
> Thanks,
> Carl
>
> main.cpp
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> #include <QtGui/QApplication>
> #include <QtDeclarative>
> class MyType : public QObject {
> Q_OBJECT
> public:
> MyType(QObject *parent = 0) : QObject(parent) {}
> public slots:
> void doSomething() {
> qDebug() << "DoSomething!";
> }
> };
>
> int main(int argc, char *argv[]) {
> QApplication a(argc, argv);
> qmlRegisterType<MyType>("MyType", 1,0, "MyType");
>
> QGraphicsView *graphicsView = new QGraphicsView;
> graphicsView->setGeometry(QRect(0, 0, 500, 500));
> QGraphicsScene* scene = new QGraphicsScene(0, 0, 500, 500);
> graphicsView->setScene(scene);
>
> QDeclarativeEngine *engine = new QDeclarativeEngine;
> QDeclarativeComponent component(engine, QUrl("qrc:/myqml.qml"));
> QDeclarativeItem *root = qobject_cast<QDeclarativeItem
> *>(component.create());
> scene->addItem(root);
>
> //QObject* rect = root->findChild<QObject*>("button");
> QObject* button = qFindChild<QObject*>(root, QString("button"));
> if(button) {
> MyType *mytype = new MyType;
> QObject::connect(button, SIGNAL(clicked()), mytype,
> SLOT(doSomething()));
> }
>
> graphicsView->show();
> return a.exec();
> }
> #include "main.moc"
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> res.qrc
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> <RCC>
> <qresource prefix="/">
> <file>myqml.qml</file>
> </qresource>
> </RCC>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> myqml.qml
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> import Qt 4.7
> //import MyType 1.0
> Item {
> id: screen
> width: 500; height: 500;
> Rectangle {
> id: button
> signal clicked
> width: 200; height: 200; color: "red"
> MouseArea {
> anchors.fill: parent
> onClicked: {
> button.color = "blue";
> button.clicked();
> }
> }
> }
> // MyType {
> // id: mytype1
> // }
> // Connections {
> // target: button
> // onClicked: ??????
> // }
> }
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> QMLConnectTest.pro
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> QT += core gui declarative
> TARGET = QMLConnectTest
> TEMPLATE = app
> RESOURCES += res.qrc
> SOURCES += main.cpp
> OTHER_FILES += myqml.qml
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
>
>
>
More information about the Qt-interest-old
mailing list