Мне нужно повторно использовать приложение Widget в приложении на основе Qml с последней версией Qt (Qt 5.2). Но, по мнению большинства людей, это очень плохая идея.Почему это плохо Идея встроить виджет в приложение на основе Qml
Может кто-нибудь объяснить, почему это плохая идея?
Некоторые из фрагмента кода,
* .h
class MyAppItem: public QQuickPaintedItem{
Q_OBJECT
public:
explicit MyAppItem(QQuickItem *parent = 0);
void paint(QPainter *painter);
private:
CMyAppWidget *bp;
};
class RouteBWExtensionPlugin: public QQmlExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
public:
/**
* @brief register the plugin
* @param[in] uri to be registered
*/
void registerTypes(const char * uri);
};
* .cpp
MyAppItem::MyAppItem(QQuickItem *parent)
: QQuickPaintedItem(parent)
{
bp = new CMyAppWidget();
}
void MyAppItem::paint(QPainter *painter)
{
bp->render(painter);
}
void RouteBWExtensionPlugin::registerTypes(const char * uri)
{
qmlRegisterType<MyAppItem>(uri, 1, 0, "MyAppItem");
}
* .qml файл
import MyAppWidget 1.0
Item {
width: 300
height: 10
anchors.right: parent
MyAppItem {
width: 94
height: 240
anchors.right: parent
MouseArea{
anchors.fill: parent
onClicked: {
console.log("[veo] onClicked - capture triggered")
}
}
}
}
Как вы планируете это делать? – Mitch
Я использовал класс QQuickPaintedItem и QQmlExtensionPlugin из новой версии Qt. – Swapnil
Итак ... нет виджетов? Что мне здесь не хватает?: p Это звучит как очень разумный способ сделать это, предполагая, что вы просто скопировали команды 'QPainter' из ваших классов виджетов и никаких связанных с виджетами вещей. – Mitch