Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Exceptions using InputPanel

Exceptions using InputPanel

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
4 Posts 3 Posters 587 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • alemioA Offline
    alemioA Offline
    alemio
    wrote on last edited by
    #1

    Hi, I'm using Qt 5.13.2. If I add InputPanel in qml code, I receive some exceptions

    Exception at 0x752c35d2, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) (first chance) in dwrite!GdiFontFileLoader::CreateFontFace

    Exception at 0x752c35d2, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) (first chance) in dwrite!MapExceptionToHresult

    this is the QML code:

    import QtQuick 2.13
    import QtQuick.Window 2.13
    import QtQuick.VirtualKeyboard 2.2

    Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    InputPanel{
    
    }
    

    }

    I think it is an internal problem of qt code, can fix this problem or hide this output?

    Regards

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maba
      wrote on last edited by maba
      #2

      The same problem still exists in Qt 5.15.1.
      Even if I run the example project I have an exception.

      Debugger encountered an exception: Exception at 0x7ff999113e49, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be continued) (first chance)
      
      

      If I use the debugger and debug into the exception I see the applicatoin tries to load a font from WindowsFontDataBase. The font has the family name Sans.

      1  RaiseException                                          KERNELBASE                          0x7ff999113e49 
      2  CxxThrowException                                       msvcrt                              0x7ff99ac4af2d 
      3  DWriteCreateFactory                                     dwrite                              0x7ff98cc609f1 
      4  dwrite                                                                                      0x7ff98cbc7dca 
      5  QWindowsFontDatabase::createEngine                      qwindowsfontdatabase.cpp       1968 0x7ff94cfff92a 
      6  QWindowsFontDatabase::fontEngine                        qwindowsfontdatabase.cpp       1277 0x7ff94cffd506 
      7  loadSingleEngine                                        qfontdatabase.cpp              971  0x7ff944b71a3c 
      8  loadEngine                                              qfontdatabase.cpp              1001 0x7ff944b71cb8 
      9  QFontDatabase::findFont                                 qfontdatabase.cpp              2737 0x7ff944b6cfc3 
      10 QFontDatabase::load                                     qfontdatabase.cpp              2823 0x7ff944b6d610 
      11 QFontPrivate::engineForScript                           qfont.cpp                      228  0x7ff944b2e31a 
      12 QScriptLine::setDefaultHeight                           qtextengine.cpp                2821 0x7ff944b7fd7d 
      13 QTextLine::layout_helper                                qtextlayout.cpp                1815 0x7ff944bb2458 
      14 QTextLine::setLineWidth                                 qtextlayout.cpp                1606 0x7ff944baf203 
      15 QQuickTextPrivate::setLineGeometry                      qquicktext.cpp                 1203 0x7ff94404bce5 
      16 QQuickTextPrivate::setupTextLayout                      qquicktext.cpp                 824  0x7ff94404e844 
      17 QQuickTextPrivate::updateSize                           qquicktext.cpp                 413  0x7ff94404a4a2 
      18 QQuickTextPrivate::updateLayout                         qquicktext.cpp                 295  0x7ff94404b8cf 
      19 QQuickText::componentComplete                           qquicktext.cpp                 2767 0x7ff944045efa 
      20 QQmlObjectCreator::finalize                             qqmlobjectcreator.cpp          1417 0x7ff945e94133 
      21 QQmlIncubatorPrivate::incubate                          qqmlincubator.cpp              364  0x7ff945dcf4fc 
      22 QQmlEnginePrivate::incubate                             qqmlincubator.cpp              91   0x7ff945dce4de 
      23 QQmlComponent::create                                   qqmlcomponent.cpp              1179 0x7ff945dc386f 
      24 QQuickLoaderPrivate::_q_sourceLoaded                    qquickloader.cpp               744  0x7ff9440f1767 
      25 QQuickLoaderPrivate::load                               qquickloader.cpp               617  0x7ff9440f0522 
      26 QQuickLoader::componentComplete                         qquickloader.cpp               807  0x7ff9440ef734 
      27 QQmlObjectCreator::finalize                             qqmlobjectcreator.cpp          1417 0x7ff945e94133 
      28 QQmlComponentPrivate::complete                          qqmlcomponent.cpp              989  0x7ff945dc6660 
      29 QQmlComponentPrivate::completeCreate                    qqmlcomponent.cpp              1080 0x7ff945dc5539 
      30 QQmlComponent::completeCreate                           qqmlcomponent.cpp              1067 0x7ff945dc3572 
      31 QQmlComponent::create                                   qqmlcomponent.cpp              821  0x7ff945dc32fe 
      32 QQuickView::continueExecute                             qquickview.cpp                 487  0x7ff9440f82c6 
      33 QQuickViewPrivate::execute                              qquickview.cpp                 103  0x7ff9440f8b6e 
      34 QQuickView::setSource                                   qquickview.cpp                 237  0x7ff9440f7c60 
      35 QtVirtualKeyboard::DesktopInputPanel::createView        desktopinputpanel.cpp          157  0x7ff968b5f5e6 
      36 QtVirtualKeyboard::PlatformInputContext::update         platforminputcontext.cpp       104  0x7ff968b1931d 
      37 QtVirtualKeyboard::PlatformInputContext::setFocusObject platforminputcontext.cpp       212  0x7ff968b19f65 
      38 QGuiApplicationPrivate::_q_updateFocusObject            qguiapplication.cpp            4302 0x7ff9449bfd8e 
      39 QGuiApplication::qt_static_metacall                     moc_qguiapplication.cpp        189  0x7ff9449b4391 
      40 doActivate<0>                                           qobject.cpp                    3901 0x7ff9435df73f 
      41 QMetaObject::activate                                   qobject.cpp                    3947 0x7ff9435cbf57 
      42 QWindow::focusObjectChanged                             moc_qwindow.cpp                841  0x7ff9449e16a3 
      43 QQuickWindowPrivate::setFocusInScope                    qquickwindow.cpp               1180 0x7ff94401c23a 
      44 QQuickItem::setFocus                                    qquickitem.cpp                 7200 0x7ff943fc0da5 
      45 QQuickItem::forceActiveFocus                            qquickitem.cpp                 4752 0x7ff943fc45ae 
      46 QQuickTextEdit::mousePressEvent                         qquicktextedit.cpp             1874 0x7ff9440a9a2f 
      47 QQuickTextArea::mouseReleaseEvent                       qquicktextarea.cpp             1170 0x7ff9418ef56c 
      48 QQuickItem::event                                       qquickitem.cpp                 8166 0x7ff943fc5a63 
      49 QQuickTextEdit::event                                   qquicktextedit.cpp             1662 0x7ff9440a9592 
      50 QCoreApplicationPrivate::notify_helper                  qcoreapplication.cpp           1224 0x7ff94356e0b1 
      51 doNotify                                                qcoreapplication.cpp           1153 0x7ff94356fb4f 
      52 QCoreApplication::notify                                qcoreapplication.cpp           1140 0x7ff94356b4b1 
      53 QGuiApplication::notify                                 qguiapplication.cpp            1936 0x7ff9449b644e 
      54 QCoreApplication::notifyInternal2                       qcoreapplication.cpp           1063 0x7ff94356cc1f 
      55 QCoreApplication::sendEvent                             qcoreapplication.cpp           1459 0x7ff94356ad02 
      56 QQuickWindowPrivate::deliverMouseEvent                  qquickwindow.cpp               1997 0x7ff9440129a7 
      57 QQuickWindowPrivate::deliverPointerEvent                qquickwindow.cpp               2590 0x7ff944016897 
      58 QQuickWindowPrivate::handleMouseEvent                   qquickwindow.cpp               2404 0x7ff94401523c 
      59 QQuickWindow::mouseReleaseEvent                         qquickwindow.cpp               2384 0x7ff94400dfdc 
      60 QQuickView::mouseReleaseEvent                           qquickview.cpp                 645  0x7ff9440f86fd 
      61 QWindow::event                                          qwindow.cpp                    2342 0x7ff9449e1987 
      62 QQuickWindow::event                                     qquickwindow.cpp               1879 0x7ff94400dd25 
      63 QCoreApplicationPrivate::notify_helper                  qcoreapplication.cpp           1224 0x7ff94356e0b1 
      64 doNotify                                                qcoreapplication.cpp           1153 0x7ff94356fb4f 
      65 QCoreApplication::notify                                qcoreapplication.cpp           1140 0x7ff94356b4b1 
      66 QGuiApplication::notify                                 qguiapplication.cpp            1936 0x7ff9449b644e 
      67 QCoreApplication::notifyInternal2                       qcoreapplication.cpp           1063 0x7ff94356cc1f 
      68 QCoreApplication::sendSpontaneousEvent                  qcoreapplication.cpp           1471 0x7ff94356cabb 
      69 QGuiApplicationPrivate::processMouseEvent               qguiapplication.cpp            2278 0x7ff9449ba7bb 
      70 QGuiApplicationPrivate::processWindowSystemEvent        qguiapplication.cpp            2003 0x7ff9449bdcd6 
      71 QWindowSystemInterface::sendWindowSystemEvents          qwindowsysteminterface.cpp     1181 0x7ff944987de2 
      72 QWindowsGuiEventDispatcher::sendPostedEvents            qwindowsguieventdispatcher.cpp 82   0x7ff94cffc792 
      73 QEventDispatcherWin32::processEvents                    qeventdispatcher_win.cpp       530  0x7ff943640632 
      74 QWindowsGuiEventDispatcher::processEvents               qwindowsguieventdispatcher.cpp 73   0x7ff94cffc744 
      75 QEventLoop::processEvents                               qeventloop.cpp                 140  0x7ff94356750b 
      76 QEventLoop::exec                                        qeventloop.cpp                 232  0x7ff943567774 
      77 QCoreApplication::exec                                  qcoreapplication.cpp           1371 0x7ff94356aa89 
      78 QGuiApplication::exec                                   qguiapplication.cpp            1868 0x7ff9449b63d8 
      79 main                                                    main.cpp                       48   0x7ff6aacb275d 
      80 WinMain                                                 qtmain_win.cpp                 97   0x7ff6aacb4cd5 
      81 invoke_main                                             exe_common.inl                 107  0x7ff6aacb3522 
      82 __scrt_common_main_seh                                  exe_common.inl                 288  0x7ff6aacb340e 
      83 __scrt_common_main                                      exe_common.inl                 331  0x7ff6aacb32ce 
      84 WinMainCRTStartup                                       exe_winmain.cpp                17   0x7ff6aacb35b9 
      85 BaseThreadInitThunk                                     KERNEL32                            0x7ff99b347034 
      86 RtlUserThreadStart                                      ntdll                               0x7ff99b47cec1 
      
      

      Why was this code working with Qt 5.12.3? Does anyone know if there was a major change in the implementation on Qt side?

      1 Reply Last reply
      0
      • M Offline
        M Offline
        maba
        wrote on last edited by
        #3

        A deeper dive and some debugging bought me closer to the problem. I used my application which is developed with VS 2019 and made some more debugging.

        Here's a code snipped where the font engine is created. Looking closer to the content of variable lf showed me the font Sans with height of -11 trying to create an engine.

        QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, const QString &faceName,
                                                        int dpi,
                                                        const QSharedPointer<QWindowsFontEngineData> &data)
        {
            QFontEngine *fe = 0;
        
            LOGFONT lf = fontDefToLOGFONT(request, faceName);
            const bool preferClearTypeAA = lf.lfQuality == CLEARTYPE_QUALITY;
        
            if (request.stretch != 100) {
                HFONT hfont = CreateFontIndirect(&lf);
                if (!hfont) {
                    qErrnoWarning("%s: CreateFontIndirect failed", __FUNCTION__);
                    hfont = QWindowsFontDatabase::systemFont();
                }
        
                HGDIOBJ oldObj = SelectObject(data->hdc, hfont);
                TEXTMETRIC tm;
                if (!GetTextMetrics(data->hdc, &tm))
                    qErrnoWarning("%s: GetTextMetrics failed", __FUNCTION__);
                else
                    lf.lfWidth = tm.tmAveCharWidth * request.stretch / 100;
                SelectObject(data->hdc, oldObj);
        
                DeleteObject(hfont);
            }
        
        

        However this font doesn't exist on my system and therefore I got the exception. In the source file "C:\Qt\onlineinstaller\5.15.1\Src\qtvirtualkeyboard\src\virtualkeyboard\content\styles\default\style.qml" on line 37 is the following member declaration which confirmed my assumption.

            readonly property string fontFamily: "Sans"
        

        Now as a workarround I tried to map the Sans font to a font which was available in the requested size. I chose Tahoma. Under "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" I made a new registry entry.
        Starting the application and debugging into the same function showed me that the substitute font was loaded - no exceptions anymore.

        To round up my problem I made a custom style for the virutal keyboard and specified the fontFamily to Tahoma and things are working fine now.

        As I searched to find a solution for my problem there were many comments that people weren't able to reproduce the problem. I think one major issue here is that some fonts are available on some systems and some not depending on the language and settings of the OS.

        1 Reply Last reply
        0
        • fcarneyF Offline
          fcarneyF Offline
          fcarney
          wrote on last edited by
          #4

          What happens if you use QApplication instead of QGuiApplication in your main.cpp?
          I have run into quite a few QML objects that will crash the program if using QGuiApplication.

          C++ is a perfectly valid school of magic.

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved