我在一个小部件中使用Active-qt创建了Web浏览器,在第二个小部件中我创建了一个由我创建的虚拟键盘。我必须使用虚拟键盘在浏览器的文本框(例如谷歌搜索框)中书写。 我正在使用键盘发送事件方法将按键事件发送到浏览器,但它不是在Web浏览器中写入。 当我在第一个小部件中创建一个行编辑并尝试通过相同的虚拟键盘写入时,它写得很完美但是在浏览器的情况下它不是写的。所以我想访问浏览器的HTML内容以获取网站搜索框的ID。所以我把重点放在那个特定的Id上。 我很无奈,请帮忙。提前致谢。 技术堆栈QT:主动Qt组件,Qt 5.7.0,Qt创建者IDE,具有Min Gw和c ++。
编辑:测试用例的代码片段将单按钮按下事件发送到webbrowser附加设计器快照以及代码片段。 enter image description here
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);
}
答案 0 :(得分:0)
要在Web浏览器中编写,请使用SendInput方法在buttonclick事件上将人工击键发送到浏览器,它将适用于每个浏览器。在发送击键之前,您必须在每次点击按钮时都将网络浏览器保持在最顶层。 在虚拟按键上写入webbrowser的代码片段:
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浏览器上显示单个虚拟按键的示例代码。