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

问题描述 投票:0回答:2

我有代码:

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;
    }
}

我想做的是通过对话框按钮之一终止 QProcess“Prozess”。类“Ui::DialogProcessMessage”无法编辑/指定,因为它是由 QtDesigner Ui 文件直接构造的类,因此只要使用 QtDesigner 编辑 Ui 文件就会被覆盖。我该如何处理这个问题?问候

c++ qt signals-slots
2个回答
1
投票

执行此操作后:

Dialog.setupUi(ProcessMessage); 

...

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

connect(ProcessMessage->pushButton, SIGNAL(clicked()), &loop, SLOT(quit()));

我可能对如何指代孩子

->
.
是错误的,因为我实际上使用PyQt。但我相信您已经明白了。

通常,您会从一开始就设计您的类以继承 Ui 类,因此您所要做的就是在构造函数中说

setupUi(this)

目前看来您的 processOne 函数没有引用该对话框,因此您可能必须将其作为参数传递。或者提前将其直接连接到流程:

connect(ProcessMessage->pushButton, SIGNAL(clicked()), &Prozess, SLOT(kill()));

1
投票

解决办法就是使用

connect(Dialog.pushButtonAbort, SIGNAL(clicked()), &Prozess, SLOT(kill()));

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

感谢支持者。

© www.soinside.com 2019 - 2024. All rights reserved.