0

我在一个小部件中使用 Active-qt 创建了 Web 浏览器,在第二个小部件中我有一个由我创建的虚拟键盘。我必须用虚拟键盘在浏览器的文本框中(例如谷歌搜索框)写。我正在使用键盘发送事件方法将按键事件发送到浏览器,但它没有写入网络浏览器。当我在第一个小部件中创建了行编辑并尝试通过相同的虚拟键盘进行书写时,它正在完美地书写,但在浏览器的情况下它没有书写。所以我想访问浏览器的 HTML 内容来获取网站搜索框的 id。所以我把焦点放在那个特定的 ID 上。我很无奈请帮忙。提前致谢。Technology Stack QT:Active Qt 组件、Qt 5.7.0、带有 Min Gw 和 c++ 的 Qt creator IDE。

编辑:测试用例的代码片段将单个按钮按下事件发送到附加设计器快照的网络浏览器以及代码片段。 在此处输入图像描述

    UseKeyBoardDialog::UseKeyBoardDialog(QWidget *parent) : QDialog(parent)

{
    setupUi(this);
    WebBrowser->setControl("8856F961-340A-11D0-A96B-00C04FD705A2");


    QString htmlDoc = WebBrowser->generateDocumentation();
    QString outputFilename = "Results.html";
    QFile outputFile(outputFilename);
    outputFile.open(QIODevice::WriteOnly);
    /* Check it opened OK */
        if(!outputFile.isOpen()){
           qDebug() << "- Error, unable to open" << outputFilename << "for output";
        }
        /* Point a QTextStream object at the file */
        QTextStream outStream(&outputFile);
        /* Write the line to the file */
        outStream << htmlDoc;
        /* Close the file */
        outputFile.close();
    //qDebug()<<"htmlDoc "<<htmlDoc;

}

void UseKeyBoardDialog::navigate(const QString &url)
{
    WebBrowser->dynamicCall("Navigate(const QString&)", url);
}

void UseKeyBoardDialog::on_pushButton_clicked()
{
     // lineEdit->setFocus();
    WebBrowser->setFocus();

           keybd_event( 0,
                        0x1E,
                        KEYEVENTF_SCANCODE| 0,
                        0 );

        // Simulate a key release
           keybd_event( 0,
                        0x1E,
                        KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE,
                        0);



}
4

1 回答 1

0

要在 Web 浏览器中编写,请使用 SendInput 方法在 buttonclick 事件上将人工击键发送到浏览器,它适用于每个浏览器。在发送击键之前,每次单击按钮时,您都必须将 Web 浏览器保持在顶部。在虚拟按键上写入网络浏览器的代码片段:

void Widget::on_pushButton_clicked() {
ui->axWidget->setFocus(); //setting focus of webbrowser
ui->pushButton->setFocusPolicy(Qt::NoFocus);//focus policy of virtual key 
//webbrowser on top every time 
ui->axWidget->setWindowFlags(Qt::WindowStaysOnTopHint);

   INPUT ip;
        ip.type = INPUT_KEYBOARD;
        ip.ki.wVk = 0x41;
        ip.ki.wScan = 0;
        ip.ki.dwFlags = 0;
        ip.ki.time = 0;
        ip.ki.dwExtraInfo = 0;
        // Send the keyboard event to the specified window
        SendInput(1, &ip, sizeof(INPUT)); }

此代码是在 Web 浏览器上显示单个虚拟按键的示例代码。

于 2017-06-12T12:31:50.540 回答