Qt: Как подключить QPushButton из "DialogClass1", чтобы убить QProcess в "Class2"? - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть код:

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" нельзя редактировать / указывать, поскольку он является классом, непосредственно созданным Ui-файлом QtDesigner, и поэтому будет перезаписываться каждый раз, когда Ui-файл редактируется с помощью QtDesigner. Как я могу справиться с этим? привет

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Решение состоит в том, чтобы просто использовать

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

Вероятно, так и есть, поскольку в этом случае Dialog является «основным объектом», а объект «ProcessMessage» используется для его указания.Получил это с форума QDeveloper.

THX для поддержки парней.

1 голос
/ 02 апреля 2012

После того, как вы сделаете это:

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()));
...