我有代码:
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 文件就会被覆盖。我该如何处理这个问题?问候
执行此操作后:
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()));
解决办法就是使用
connect(Dialog.pushButtonAbort, SIGNAL(clicked()), &Prozess, SLOT(kill()));
可能是这样,因为在本例中 Dialog 是“主对象”,而对象“ProcessMessage”只是用来指定它。从 QDeveloper 论坛得到这个。
感谢支持者。