Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt5 COM Interface ITextInputPanel in windows doesn't work while fine in Qt4.7 (Touch Event)
Forum Updated to NodeBB v4.3 + New Features

Qt5 COM Interface ITextInputPanel in windows doesn't work while fine in Qt4.7 (Touch Event)

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 1.1k Views 1 Watching
  • 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.
  • N Offline
    N Offline
    ninon.lafourcade
    wrote on last edited by
    #1

    Hello,
    'm using the COM Interface ITextInputPanel (windows) in Qt4 (4.7.4) to display the OS Virtual Keyboard on touch event and it works fine.
    But when I use Qt5 (5.3.2), windows refuse to display the keyboard.

    Here the code.

    MyDlg.h :

    @
    class CMyDlg : public QDialog
    {
    Q_OBJECT
    protected:

    ITextInputPanel* m_piTextInputPanel;
    QLineEdit* m_pLineEdit;

    public:
    CDlgSelConfig(QWidget* parent = NULL);
    ~CDlgSelConfig();

    virtual bool eventFilter(QObject *obj, QEvent *event);

    protected slots:
    void OnAccepted();

    protected:
    void _SetupUI();
    };
    @

    @
    CMyDlg::CMyDlg(QWidget* parent)
    : QDialog(parent)
    , m_piTextInputPanel(nullptr)
    , m_pLineEdit(nullptr)
    {
    _SetupUI();
    }

    //--------------------------------------------------------------
    CMyDlg::~CMyDlg()
    {
    if (m_piTextInputPanel != nullptr)
    m_piTextInputPanel->Release();
    }

    //--------------------------------------------------------------
    void CMyDlg::_SetupUI()
    {
    // cree la fentre
    setObjectName(QString::fromUtf8("DlgSelConfig"));
    resize(400, 311);
    setMinimumSize(QSize(400, 100));
    setWindowFlags(windowFlags()&(~Qt::WindowContextHelpButtonHint));

    setWindowTitle(DLLRES_sLoadQString(IDS_CW_TITRE_SELPARAMETRAGE));

    QGridLayout* pGridLayout=new QGridLayout(this);
    QVBoxLayout* pVerticalLayout=new QVBoxLayout();

    if( SUCCEEDED(CoCreateInstance( CLSID_TextInputPanel, nullptr, CLSCTX_INPROC, IID_ITextInputPanel, (void **) &m_piTextInputPanel)))
    {

    m_pLineEdit = new QLineEdit(this);
    pVerticalLayout->addWidget(m_pLineEdit);

    m_pLineEdit->installEventFilter(this);
    m_pLineEdit->setAttribute(Qt::WA_NativeWindow);
    m_pLineEdit->setAttribute(Qt::WA_AcceptTouchEvents);

    HWND hWnd = (HWND)m_pLineEdit->winId();

    //Attach the windows
    XDBG(HRESULT hr = )m_piTextInputPanel->put_AttachedEditWindow(hWnd);
    XASSERT(SUCCEEDED(hr));

    XDBG(hr = )m_piTextInputPanel->put_InPlaceVisibleOnFocus(FALSE);
    XASSERT(SUCCEEDED(hr));

    XDBG(hr = )m_piTextInputPanel->put_DefaultInPlaceState(InPlaceState_Expanded);
    XASSERT(SUCCEEDED(hr));
    }
    QObject::connect(pButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
    QObject::connect(pButtonBox, SIGNAL(accepted()), this, SLOT(OnAccepted()));
    }

    //--------------------------------------------------------------
    void CDlgSelConfig::OnAccepted()
    {
    done(QDialog::Accepted);
    }

    //-------------------------------------------------------------------
    bool CDlgSelConfig::eventFilter(QObject *pclSrc, QEvent *pclEvent)
    {
    if ((pclEvent->type()==QEvent::TouchBegin) && (pclSrc==m_pLineEdit))
    {

    XDBG(HRESULT hr = )m_piTextInputPanel->SetInPlaceVisibility(TRUE);
    //hr=E_FAIL in Qt 5.3.2
    }

    return __super::eventFilter(pclSrc, pclEvent);
    }
    @

    Any idea why ?

    Thank you in advance.

    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