LINUX.ORG.RU

История изменений

Исправление AF, (текущая версия) :

Примерно так:

#include <QtDeclarative>
#include <QtGui>

class PushButtonItem : public QDeclarativeItem {
Q_OBJECT
public:
PushButtonItem(QDeclarativeItem *parent =0) : QDeclarativeItem(parent) {
pb = new QPushButton("text");
proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(pb);
proxy->setPos(-pb->sizeHint().width()/2, -pb->sizeHint().height()/2);
}
private:
QPushButton *pb;
QGraphicsProxyWidget *proxy;
};


int main(int argc, char **argv) {
QApplication app(argc, argv);
QDeclarativeView view;
qmlRegisterType<PushButtonItem>("PushButton", 1, 0, "PushButtonItem");
view.setSource(QUrl::fromLocalFile("file.qml"));
view.show();
return app.exec();
};

with file.qml:
import Qt 4.7
import PushButton 1.0


Rectangle {
width: 300
height: 300
PushButtonItem {
anchors.centerIn: parent
}
}

ЗЫ: А еще можно в пол-пинка пробросить в QML инстанс потомка QObject и напрямую обращатьтся к его пропертям, сигналам/слотам и некоторым методам.

выглядит примерно так:

    QDeclarativeView *view = new  QDeclarativeView(main_window);
    view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
    view->rootContext()->setContextProperty("mainwindow", main_window);

И теперь в QML есть доступ к главному окну по имени «mainwindow»

Исправление AF, :

Примерно так:

#include <QtDeclarative>
#include <QtGui>

class PushButtonItem : public QDeclarativeItem {
Q_OBJECT
public:
PushButtonItem(QDeclarativeItem *parent =0) : QDeclarativeItem(parent) {
pb = new QPushButton("text");
proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(pb);
proxy->setPos(-pb->sizeHint().width()/2, -pb->sizeHint().height()/2);
}
private:
QPushButton *pb;
QGraphicsProxyWidget *proxy;
};


int main(int argc, char **argv) {
QApplication app(argc, argv);
QDeclarativeView view;
qmlRegisterType<PushButtonItem>("PushButton", 1, 0, "PushButtonItem");
view.setSource(QUrl::fromLocalFile("file.qml"));
view.show();
return app.exec();
};

with file.qml:
import Qt 4.7
import PushButton 1.0


Rectangle {
width: 300
height: 300
PushButtonItem {
anchors.centerIn: parent
}
}

Исправление AF, :

Примерно так:

#include <QtDeclarative>
#include <QtGui>

class PushButtonItem : public QDeclarativeItem {
Q_OBJECT
public:
PushButtonItem(QDeclarativeItem *parent =0) : QDeclarativeItem(parent) {
pb = new QPushButton("text");
proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(pb);
proxy->setPos(-pb->sizeHint().width()/2, -pb->sizeHint().height()/2);
}
private:
QPushButton *pb;
QGraphicsProxyWidget *proxy;
};


#include "main.moc"

int main(int argc, char **argv) {
QApplication app(argc, argv);
QDeclarativeView view;
qmlRegisterType<PushButtonItem>("PushButton", 1, 0, "PushButtonItem");
view.setSource(QUrl::fromLocalFile("file.qml"));
view.show();
return app.exec();
};

with file.qml:
import Qt 4.7
import PushButton 1.0


Rectangle {
width: 300
height: 300
PushButtonItem {
anchors.centerIn: parent
}
}

Исходная версия AF, :

Примерно так:

[code=c]
#include <QtDeclarative>
#include <QtGui>

class PushButtonItem : public QDeclarativeItem {
Q_OBJECT
public:
PushButtonItem(QDeclarativeItem *parent =0) : QDeclarativeItem(parent) {
pb = new QPushButton(«text»);
proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(pb);
proxy->setPos(-pb->sizeHint().width()/2, -pb->sizeHint().height()/2);
}
private:
QPushButton *pb;
QGraphicsProxyWidget *proxy;
};


#include «main.moc»

int main(int argc, char **argv) {
QApplication app(argc, argv);
QDeclarativeView view;
qmlRegisterType<PushButtonItem>(«PushButton», 1, 0, «PushButtonItem»);
view.setSource(QUrl::fromLocalFile(«file.qml»));
view.show();
return app.exec();
};

with file.qml:
import Qt 4.7
import PushButton 1.0


Rectangle {
width: 300
height: 300
PushButtonItem {
anchors.centerIn: parent
}
}
[/code]