首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt:如何连接DialogClass1的QPushButton来杀死Class2中的QProcess?

Qt:如何连接DialogClass1的QPushButton来杀死Class2中的QProcess?
EN

Stack Overflow用户
提问于 2012-04-02 06:13:56
回答 2查看 522关注 0票数 0

我有代码:

代码语言:javascript
复制
void Processmethod()
{

    QDialog *ProcessMessage = new QDialog;      
    // HOW TO CONNECT THE DIALOGS PUSHBUTTON TO KILL THE PROCESS called in processmethodONE() ?
    Ui::DialogProcessMessage Dialog;        //polymorphy      
    Dialog.setupUi(ProcessMessage);              
    ProcessMessage->setModal(true);
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show();

    processmethodONE(); 
} 

void processmethodONE()
{
    QString ProcessCommand = "w8 " + blablubli";            

    Prozess.setWorkingDirectory(Path);         //QProcess "Prozess" is globaly defined  
    Prozess.setStandardOutputFile(Path);       //in my class
    QEventLoop loop;                                                                 
    connect(&Prozess, SIGNAL(error(QProcess::ProcessError)), &loop, SLOT(quit()));
    connect(&Prozess, SIGNAL(finished(int, QProcess::ExitStatus)), &loop, SLOT(quit()));
    Prozess.start(ProcessCommand);
    loop.exec();

    QProcess::ExitStatus Status = Prozess.exitStatus(); 

    if (Status == 0)
    {
        std::cout <<"Exit-Status: " << Status << " File created!" << std::endl;
    }
else
    {
        std::cout << "Exit-Status: " << Status << " Error-Code: " << Prozess.error() << "Process failed!" << std::endl;
    }
}

我想要做的是,通过其中一个对话框pushButtons来杀死QProcess“进程”。无法编辑/指定"Ui::DialogProcessMessage“类,因为它是由QtDesigner Ui-File直接构造的类,因此任何时候使用QtDesigner编辑Ui-File都会被覆盖。我该怎么处理呢?问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 21:26:12

解决方案就是使用

代码语言:javascript
复制
connect(Dialog.pushButtonAbort, SIGNAL(clicked()), &Prozess, SLOT(kill()));

可能是这样的,因为在本例中对话框是“主对象”,而对象"ProcessMessage“只是用来指定它的。这是从QDeveloper论坛上得到的。

谢谢你的支持。

票数 1
EN

Stack Overflow用户

发布于 2012-04-02 10:07:42

执行此操作后:

代码语言:javascript
复制
Dialog.setupUi(ProcessMessage); 

...ProcessMessage现在拥有用Ui::DialogProcessMessage设计的所有小部件。您可以通过它们的名称访问所有项目。

代码语言:javascript
复制
connect(ProcessMessage->pushButton, SIGNAL(clicked()), &loop, SLOT(quit()));

我可能不知道如何指代->.的孩子,因为我实际上使用的是PyQt。但我相信你已经明白了。

通常,您会从一开始就将您的类设计为继承Ui类,这样您所要做的就是在构造函数中指定setupUi(this)

目前,您的processOne函数似乎没有对对话框的引用,因此您可能必须将其作为一个arg传入。或者直接将其连接到进程:

代码语言:javascript
复制
connect(ProcessMessage->pushButton, SIGNAL(clicked()), &Prozess, SLOT(kill()));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9968794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档