我有代码:
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都会被覆盖。我该怎么处理呢?问候
发布于 2012-04-03 21:26:12
解决方案就是使用
connect(Dialog.pushButtonAbort, SIGNAL(clicked()), &Prozess, SLOT(kill()));可能是这样的,因为在本例中对话框是“主对象”,而对象"ProcessMessage“只是用来指定它的。这是从QDeveloper论坛上得到的。
谢谢你的支持。
发布于 2012-04-02 10:07:42
执行此操作后:
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()));https://stackoverflow.com/questions/9968794
复制相似问题