为什么虚拟键盘不适用于QT中的QDialog TextBox

Why virtual keyboard does not work with QDialog textbox in Qt?

本文关键字:中的 QDialog TextBox QT 适用于 虚拟 键盘 不适用 为什么      更新时间:2023-10-16

我为键盘更少的设备提供了应用程序。我将ThisRef用于键盘作为虚拟键盘。我的项目中有一个对话框,其中有两个文本框(其中一个用于输入用户名,另一个用于输入密码),带有两个按钮:确定和取消。构建项目并运行后,按菜单按钮显示菜单表单,然后对话框似乎检查用户身份验证。用户应在文本框上输入数据虚拟键盘。出现虚拟键盘(本Ref中的输入面板),但按钮不起作用。当我搜索时,我看到了"听起来您正在尝试从对话框中打开另一个窗口 - 这是您的错误。当然,对话框将保持在顶部 - 这就是它的工作。"因为对话框是模态,所以虚拟键盘是禁用的无论如何是否可以编辑对话框或键盘以在模态小部件中工作?

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include "myinputpanelcontext.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyInputPanelContext *ic= new MyInputPanelContext; ;
    a.setInputContext(ic);
    MainWindow w;
    //w.show();
    w.showFullScreen();
    w.centralWidget()->releaseKeyboard();
    return a.exec();
}

mainwindow.cpp:

MyDialog *d=new MyDialog(this);
d.exec();

它已解决:

模态对话框以exec()启动,它们会在嵌套事件循环运行时阻止程序流。show()启动了无调对话框,它们不会阻止程序流。

来自http://www.qtforum.org/article/14285/modeless-dialog.html我使用此代码:

 MyDialog *d=new MyDialog(this);
   d->show();
   d->raise();
   q->activewindows();

而不是此代码:

MyDialog *d=new MyDialog(this);
   d.exec();

作为文档参考:

一个无模式对话框:void editorwindow :: find(){

    if (!findDialog) {
>         findDialog = new FindDialog(this);
>         connect(findDialog, SIGNAL(findNext()), this, SLOT(findNext()));
>     } findDialog->show();
>     findDialog->raise();
>     findDialog->activateWindow(); }

从这里