История изменений
Исправление 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]