Professional Documents
Culture Documents
to an existing QWidget
application
Michael Eads
Senior Tools Engineer
Telltale Games
Outline
Introduction
Quirks
Conclusion
Questions
Introduction
Who We Are
For Example...
What I do
Desktop only
QML / Quick
Qt
Game Engine
(C++, non-Qt)
Game Data
Model
(C++)
Query State
(Selection, Undo)
Modifies
Slot Bank
(C++)
Updates
Mouse Interaction
User Interaction
QML Interface
C++ Structure
Game Data
QML Responds
Qt Structure
Polling Model
Slot Bank
Undo/Redo, Delete
QML Setup
View based
Mouse interaction
QtQuick Controls
QtQuick Dialogs
No QInputDialog equivalent?
Shortcut context?
Extending Action
Extending Menu
onPopupVisibleChanged:
{
showingPopup = !showingPopup;
if(showingPopup)
{
menuAboutToShow()
}
}
No floating
No separators
Slow to open
Flash or blink on
Show
Clicking a Submenu
closes all open menus
Truncates text
Menus truncate on
multiple monitors
QQuickWidget
QWidget::createWindowContainer
QWindow / QQuickWindow /
QQuickView
Simplest
Best Performing
QQuickWidget
Performance Considerations
QWidget
::createWindowContainer
Works great for entirely QML application where stacking doesn't matter
Set QWindow container widget as Focus Proxy for top level QWidget
CreateWidgetContainer Example
// Within QWidget derived class
QQmlComponent windowLoader(qmlEngine, this);
WindowLoader->loadUrl(QUrlqrc://MyQmlWindow.qml);
QQuickWindow* quickWindow = qobject_cast<QQuickWindow*>(windowLoader->create());
QSize size = quickWindow->size();
QWidget* container = QWidget::createWindowContainer(quickWindow, this);
setCentralWidget(m_widget);
setFocusProxy(m_widget); // focus container widget when top level widget is focused
resize(size);
setFocusPolicy(Qt::NoFocus); // work around QML activation issue
Conclusion
We're Hiring!
1+ Year of Qt Experience
Questions?