Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么窗户不弹出?_C++_Qt_Popup_Qprocess - Fatal编程技术网

C++ 为什么窗户不弹出?

C++ 为什么窗户不弹出?,c++,qt,popup,qprocess,C++,Qt,Popup,Qprocess,我有以下源代码: Processmethod() { QDialog *ProcessMessage = new QDialog; Ui::DialogProcessMessage Dialog; Dialog.setupUi(ProcessMessage); ProcessMessage->setModal(true); ProcessMessage->setAttrib

我有以下源代码:

    Processmethod()
{

    QDialog *ProcessMessage = new QDialog;      
    Ui::DialogProcessMessage Dialog;            
    Dialog.setupUi(ProcessMessage);             
    ProcessMessage->setModal(true);
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show();



    PROCESSES START                     
}

在我想显示QDialog“ProcessMessage”之后,有三个QProcess进程包含在以下三种不同的方法中。如果我使用
/
禁用这些方法,弹出窗口将正常显示,但如果启用这些方法,进程将正常运行,但不会显示弹出窗口。有什么想法/解决方案吗?问候语

在代码执行退出
ProcessMethod()
之前,无法显示该对话框。如果您正在同步使用
QProcess
es(通过调用任何
waitForXXX
方法),则这将导致您看到的问题。任何其他阻塞主线程的操作都会导致此问题。

在代码执行退出
ProcessMethod()
之前,无法显示该对话框。如果您正在同步使用
QProcess
es(通过调用任何
waitForXXX
方法),则这将导致您看到的问题。任何其他阻塞主线程的操作都会导致此问题。

只有在未返回Process method时,才会显示窗口,因为主应用程序循环是在main函数中实现的

int main(int argc, char *argv[])
{
        QApplication a(argc, argv);
        QDialog w; // or other window
        w.show();
        return a.exec(); // main app loop (all drawing procedures called from here
}
所以,如果调用流程,则在流程方法返回QApplication::exec()之前,不会发生任何事情


您可以在单独的线程中启动进程,并通过在队列模式下实现signals\slots向您的对话框发送进度通知

您的窗口不会显示,直到Process method未返回,因为main函数中实现了主应用程序循环

int main(int argc, char *argv[])
{
        QApplication a(argc, argv);
        QDialog w; // or other window
        w.show();
        return a.exec(); // main app loop (all drawing procedures called from here
}
所以,如果调用流程,则在流程方法返回QApplication::exec()之前,不会发生任何事情


您可以在单独的线程中启动进程,并通过在排队模式下实现signals\slots向您的对话框发送进度通知

似乎错误在Ui::DialogProcessMessage中。可以查看一下吗?在对话框中调用setModal(true),仍然调用show()。您是否尝试过使用exec()而不是show()?当我使用exec()时,会出现窗口,但在关闭窗口之前,进程不会启动。但我的目的是查看进程正在运行的窗口。的可能重复项似乎错误在Ui::DialogProcessMessage中。可以查看一下吗?在对话框中调用setModal(true),仍然调用show()。您是否尝试过使用exec()而不是show()?当我使用exec()时,会出现窗口,但在关闭窗口之前,进程不会启动。但是我的意图是看到进程运行的窗口。可能的重复是我在进程中使用
QProcess::waitForFinished(int)
是的,我在进程中使用
QProcess::waitForFinished(int)
没有任何方法让对话框弹出(停留在主窗口的顶部)然后让它在主窗口中冻结?尝试在长进程开始之前调用静态函数QApplication::processEvents(),在这种情况下,您会看到对话框,但应用程序将冻结,直到Processmetod()返回。如果不想创建单独的线程,则在更改对话框状态(更新进度状态,然后调用QApplication::processEvents()以在显示中显示)后,必须在长进程中不时调用QApplication::processEvents())好的,我现在尝试了,窗口也出现了,但缺少窗口(对话框)文本!?!另一个想法:当方法未到达末尾或方法未返回int时,是否可以执行“do循环”?因此,我可以将对话框复制到该循环中-这只是一个想法,我不确定这是否可行。是否有任何方法可以让对话框弹出(保持在主窗口的顶部)并让它在主窗口中冻结?在长时间的进程开始之前,尝试调用静态函数QApplication::processEvents(),在这种情况下,您会看到对话框,但应用程序将冻结,直到Processmetod()返回。如果不想创建单独的线程,则在更改对话框状态(更新进度状态,然后调用QApplication::processEvents()以在显示中显示)后,必须在长进程中不时调用QApplication::processEvents())好的,我现在尝试了,窗口也出现了,但缺少窗口(对话框)文本!?!另一个想法:当方法未到达末尾或方法未返回int时,是否可以执行“do循环”?所以我可以把对话复制到循环中——这只是一个想法,我不确定这是否可行。