簡體   English   中英

問:如何連接“DialogClass1”的QPushButton來殺死“Class2”中的QProcess?

[英]Qt: How to connect a QPushButton of a “DialogClass1” to kill a QProcess in a “Class2”?

我有代碼:

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“Prozess”。 無法編輯/指定類“Ui :: DialogProcessMessage”,因為它是由QtDesigner Ui-File直接構造的類,因此在使用QtDesigner編輯Ui文件時將被覆蓋。 我怎么處理這個? 問候

執行此操作后:

Dialog.setupUi(ProcessMessage); 

... ProcessMessage現在擁有在Ui::DialogProcessMessage中設計的所有小部件。 您可以按名稱訪問所有項目。

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

關於如何引用孩子,我可能錯了, ->. ,因為我實際上使用PyQt。 但我相信你明白了。

通常你會從一開始就設計你的類來繼承Ui類,所以你要做的就是在你的構造函數中說setupUi(this)

目前看來你的processOne函數沒有引用對話框,所以你可能不得不把它作為arg傳遞。 或者將其更早地直接連接到流程:

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

解決方案就是使用

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

可能是這樣,因為在這種情況下Dialog是“主要對象”,而對象“ProcessMessage”僅用於指定它。 從QDeveloper論壇得到了這個。

THX為支持人員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM