Action Shortcut Doesn't Work in QML When Combining Qt Widgets and QML with QWidget::createWindowContainer()



  • I started the example to create a Qt GUI application with a UI class derived from QMainWindow and a Qt Designer form.
    In the implementation of the UI class in mainwindow.cpp, I created a QQuickView and then call QWidget::createWindowContainer(), passing in the view and the parent widget. This returns a QWidget that we can add to the UI layout. Shown below is the code in mainwindow.cpp.

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        setWindowTitle(tr("Tab Dialog"));
    
        _qmlView        = new QQuickView();
        _qmlView->setSurfaceType(QSurface::OpenGLSurface);
        _qmlView->setSource(QUrl("TMainView.qml"));
        _qmlView->setResizeMode(QQuickView::SizeRootObjectToView);
        _qmlWidget      = QWidget::createWindowContainer(_qmlView);
    
        ui->horizontalLayout->addWidget(_qmlWidget);
    }
    

    I created a simple QML file which displays a rectangle and when user click right mouse button the Menu will be appeared.

    Rectangle {
        id: main
        width: 600
        height: 300
    
        Rectangle{
    
            Menu {
                id: menu
                title: "Edit";
    
                MenuSeparator { }
    
                MenuItem { action: copyAction; shortcut: StandardKey.Copy }
                MenuItem { action: pasteAction }
                MenuItem { action: selectAllAction }
    
                MenuSeparator { }
                MenuItem { action: deleteAction }
                MenuItem { text: "Delete all" }
    
                MenuSeparator { }
                MenuItem { text: "Auto arrange" }
    
                }
        }
    
        Action {
                id: copyAction
                text: "&Copy"
                shortcut: StandardKey.Copy
                iconName: "edit-copy"
                onTriggered: console.log("Ctrl+C is pressed")
            }
    
        Action {
                id: pasteAction
                text: "&Paste"
                shortcut: StandardKey.Paste
                iconName: "edit-paste"
                onTriggered: console.log("Ctrl+V is pressed")
            }
    
        Action {
                id:selectAllAction
                text: "&SellectAll"
                shortcut: StandardKey.SelectAll
                iconName: "edit-selectAll"
                onTriggered: console.log("Ctrl+A is pressed")
            }
    
        Action {
                id: deleteAction
                text: "&Delete"
                shortcut: StandardKey.Delete
                iconName: "edit-delete"
                onTriggered: console.log("Delete is pressed")
            }
    
        MouseArea{
            anchors.fill : parent;
            acceptedButtons: Qt.LeftButton | Qt.RightButton
    
            onClicked: {
                if(mouse.button === Qt.RightButton){
                    menu.popup();
                }
            }
        }
    }
    

    But my question is when I click right mouse button, shortcut doesn't work after that but then I minimize the windows and then maximize shortcut will be activated again. Whenever I click right mouse button, shortcut will be disable. WHY?


  • Moderators

    Hi,

    QQuickView + QWidget::createWindowContainer() has known issues. Try QQuickWidget instead.



  • @JKSH Thank you very much for the prompt reply. I tried it, ShortCut Action doesn't work in QQuickWidget at all.


  • Moderators

    @beh_zad said:

    I tried it, ShortCut Action doesn't work in QQuickWidget at all.

    Interesting... I tried it too, and you're right: The keyboard shortcuts don't trigger at all. I think it's a bug. Would you like to report this to https://bugreports.qt.io/ ?

    You can also subscribe to the Interest mailing list and ask the Qt engineers if they have a workaround for this issue.



  • @JKSH Yes, I will do it.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.