C++ HRESULT hr=exc.init(); } KeyComd::~KeyComd() { } void KeyComd::on_showbutton_clicked() { ui.elements_listwidget->clear(); 桌面元素。清

C++ HRESULT hr=exc.init(); } KeyComd::~KeyComd() { } void KeyComd::on_showbutton_clicked() { ui.elements_listwidget->clear(); 桌面元素。清,c++,qt,qmainwindow,qdialog,C++,Qt,Qmainwindow,Qdialog,HRESULT hr=exc.init(); } KeyComd::~KeyComd() { } void KeyComd::on_showbutton_clicked() { ui.elements_listwidget->clear(); 桌面元素。清除(); 此->打印密钥(); } void KeyComd::打印步骤() { 打印密钥(exc.pUIAutomation,nullptr,0); } void KeyComd::打印子体密钥(IUIAutomation*pUIAutoma

HRESULT hr=exc.init(); } KeyComd::~KeyComd() { } void KeyComd::on_showbutton_clicked() { ui.elements_listwidget->clear(); 桌面元素。清除(); 此->打印密钥(); } void KeyComd::打印步骤() { 打印密钥(exc.pUIAutomation,nullptr,0); } void KeyComd::打印子体密钥(IUIAutomation*pUIAutomation,IUIAutomationeElement*pParent,int缩进) { ///函数,该函数将10000个列表项附加到QListWidget中,QListWidget在我的QDialog中称为“elements\u listwidget”。 }
谢谢,我知道你在说什么,但我在这一行中发现一个错误
keyComd.moveToThread(&dialog\u thread)表示标识符对话框线程未定义。在mainwindow类中。您需要确保将名为
dialog\u thread
QThread
对象添加到类声明/
mainwindow.h
文件中(或者任何您想要调用的对象,只要对它的所有引用也使用相同的名称)。出现错误的原因是,在标头/声明中指定错误之前,该错误不存在。它不是一个可以通过其他方法访问的成员,如果您没有它的话。我将其添加到构造函数中,但忘记了注释,您需要记住将其移动到标题,否则它将不存在。我已经更新了代码以反映这一点。感谢这些信息,我在标题中声明了它,它运行时没有显示任何错误,但实际上我无法获得所需的行为,所需的行为是对话框的listwidget中的元素在最终用户面前实时加载,这就是我决定将该函数保留在单独线程中的原因。但是,当我尝试代码策略时,您显示了对话框屏幕冻结,并且在所有元素加载到dialogs qlistwidget中之前一直没有响应。当我在我的原始帖子中遵循代码时发生的行为是,元素在用户面前实时加载,我想这是因为我做了分离的事情;我有没有办法在你的代码中做类似的事情?我不确定我是否理解你的问题/你想做什么。你能重新措辞吗?
    void KeyComd::Print_Descendants_key(IUIAutomation* pUIAutomation, IUIAutomationElement* pParent, int indent)
{
    ///Function which appends 1000 list-items in a QListWidget called "elements_listwidget" in my QDialog.
}
#include "KeyComd.h"
#include "ui_KeyComd.h"
#include <QtCore>
#include <QtGui>
#include <vector> 
#include<QDebug>
#include "ExecutionContext.h"
#include "XMLParser.h"
#include "Logger.h"
#include "BlockCommand.h"
#include "UIAElementUtils.h"

ExecutionContext exc;
QStringList refreshed_elements;

KeyComd::KeyComd(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    HRESULT hr = exc.init();    
}

KeyComd::~KeyComd()
{
}
void KeyComd::on_showbutton_clicked()
{
    ui.elements_listwidget->clear();
    desktop_elements.clear();

    std::thread thread3(&KeyComd::Print_step, this); // Here it calls a thread, because of this thread ,the execution of "Print_Descendants_key" function happens in a separate thread from main thread
    thread3.detach();
}

void KeyComd::Print_step()
{
    Print_Descendants_key(exc.pUIAutomation, nullptr, 0);
}

void KeyComd::Print_Descendants_key(IUIAutomation* pUIAutomation, IUIAutomationElement* pParent, int indent)
{
    ///Function which appends 10000 list-items in a QListWidget called "elements_listwidget" in my QDialog.
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "XMLParser.h"
#include "ExecutionContext.h"
#include "Logger.h"
#include "BlockCommand.h"
#include "UIAElementUtils.h"
#include <thread>
#include <iostream>
#include <QtWidgets/qapplication.h>
#include <QtCore>
#include <QtGui>
#include <sstream>
#include <QtWidgets/qmessagebox.h>
#include <QtWidgets/qlistwidget.h>
#include <string>
#include <string.h>
#include <cstring>
#include <chrono>
#include <QCloseEvent>
#include "Header.h"
#include <map>
#include <QtWidgets/qinputdialog.h>
#include <vector> 
#include "dragsupport.h"
#include "KeyComd.h"


ExecutionContext exContext;

using namespace std; 

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    populatemaps();
    ui->setupUi(this);
 
    HRESULT hr = CoInitializeEx(NULL, NULL);
    ExecutionContext exContext;
    hr = exContext.init();
}


MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_xml_scripts_textbox_itemDoubleClicked(QListWidgetItem* item)
{
        KeyComd keyComd;
        keyComd.exec();

        if (keyComd.result() == QDialog::Accepted) //when i click okay,the code inside this block gets executed
        {                   
           // Here when okay is clicked, i want to check if thread3 is still running and if it is then stop/terminate the thread3 which is in KeyComd.cpp file 
           
           ui->qlistwidget->additem("Car washing Job assigned to: Jack , height 5'10, weight 86, age 21");
        }
}
#include <QThread>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "XMLParser.h"
#include "ExecutionContext.h"
#include "Logger.h"
#include "BlockCommand.h"
#include "UIAElementUtils.h"
#include <thread>
#include <iostream>
#include <QtWidgets/qapplication.h>
#include <QtCore>
#include <QtGui>
#include <sstream>
#include <QtWidgets/qmessagebox.h>
#include <QtWidgets/qlistwidget.h>
#include <string>
#include <string.h>
#include <cstring>
#include <chrono>
#include <QCloseEvent>
#include "Header.h"
#include <map>
#include <QtWidgets/qinputdialog.h>
#include <vector> 
#include "dragsupport.h"
#include "KeyComd.h"


ExecutionContext exContext;

using namespace std; 

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    populatemaps();
    ui->setupUi(this);
 
    HRESULT hr = CoInitializeEx(NULL, NULL);
    ExecutionContext exContext;
    hr = exContext.init();
 // QThread dialog_thread; move this to header
}


MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_xml_scripts_textbox_itemDoubleClicked(QListWidgetItem* item)
{
        KeyComd keyComd;
        keyComd.moveToThread(&dialog_thread);
        connect(&keyComd, &QDialog::Accepted, &dialog_thread, &QThread::quit);
        dialog_thread.start();
        keyComd.exec();        
        
        if (keyComd.result() == QDialog::Accepted) //when i click okay,the code inside this block gets executed
        {                   
           // Here when okay is clicked, i want to check if thread3 is still running and if it is then stop/terminate the thread3 which is in KeyComd.cpp file 
           ui->qlistwidget->additem("Car washing Job assigned to: Jack , height 5'10, weight 86, age 21");   
           emit keyComd.accepted();
        }
}
#include "KeyComd.h"
#include "ui_KeyComd.h"
#include <QtCore>
#include <QtGui>
#include <vector> 
#include<QDebug>
#include "ExecutionContext.h"
#include "XMLParser.h"
#include "Logger.h"
#include "BlockCommand.h"
#include "UIAElementUtils.h"

ExecutionContext exc;
QStringList refreshed_elements;

KeyComd::KeyComd(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    HRESULT hr = exc.init();
}

KeyComd::~KeyComd()
{
}
void KeyComd::on_showbutton_clicked()
{
    ui.elements_listwidget->clear();
    desktop_elements.clear();
    this->Print_Descendants_key();
}

void KeyComd::Print_step()
{
    Print_Descendants_key(exc.pUIAutomation, nullptr, 0);
}

void KeyComd::Print_Descendants_key(IUIAutomation* pUIAutomation, IUIAutomationElement* pParent, int indent)
{
    ///Function which appends 10000 list-items in a QListWidget called "elements_listwidget" in my QDialog.
}