Qt:当我在forground中处理窗口时,如何将我的主窗口放在后台?

Qt:当我在forground中处理窗口时,如何将我的主窗口放在后台?,qt,Qt,Im使用Qt框架,我正在寻找最好的方法向用户显示Im正在处理的内容 在Qt中我可以做什么: 将主窗口置于背景中,并使用 例如“处理”按摩 在完成处理之前,“处理”窗口将关闭,主窗口返回前台 你可以试试: 在调用弹出窗口的函数中,只要在进程弹出窗口显示后隐藏主窗口即可 将结束处理信号连接到主窗口插槽Show()。如果您没有预定义的信号,请创建一个并发射它 发出信号的名称 希望有帮助 编辑: 要禁用主窗口,请使用而不是隐藏和显示。您可以为“处理”-窗口提供Qt::WindowStaysOnTop

Im使用Qt框架,我正在寻找最好的方法向用户显示Im正在处理的内容
在Qt中我可以做什么:
将主窗口置于背景中,并使用 例如“处理”按摩
在完成处理之前,“处理”窗口将关闭,主窗口返回前台

你可以试试:

  • 在调用弹出窗口的函数中,只要在进程弹出窗口显示后隐藏主窗口即可
  • 将结束处理信号连接到主窗口插槽
    Show()
    。如果您没有预定义的信号,请创建一个并发射它

    发出信号的名称

希望有帮助

编辑:

要禁用主窗口,请使用而不是隐藏和显示。

您可以为“处理”-窗口提供
Qt::WindowStaysOnTopHint
,使其位于禁用的主窗口的顶部

如果您不喜欢,可以在处理窗口位于顶部时使用模糊主窗口。这样,用户会觉得在处理完成之前无法访问主窗口。

使用。它是为这种用途而设计的。您可以将QProgressDialog用作模式对话框,从而防止任何用户与主窗口的交互。QProgressDialog还为您提供了一种显示处理进度的简单方法,以及一个用于中止处理的可选按钮

编辑:

QProgressBar可以在两种状态下使用:按步骤进行或仅显示忙碌状态

QProgressDialog的进度条无法用于显示忙碌状态,因为这需要将QProgressDialog的最小值和最大值设置为0,这将立即关闭进度对话框。但是,可以使用setBar()-函数为QProgressDialog提供一个新的进度条。然后,您可以将此进度条的最小值、最大值和值设置为0,然后获得忙碌的外观

QProgressDialog progressDialog("Processing...", "Abort", 0, INT_MAX, this);

QProgressBar* bar = new QProgressBar(&progressDialog);
bar->setRange(0, 0);
bar->setValue(0);
progress.setBar(bar);

progressDialog.setMinimumWidth(350);
progressDialog.setMinimumDuration(1000);
progressDialog.setWindowModality(Qt::WindowModal);
progressDialog.setValue(0);


// Do your time consuming processing here, but remember to change 
// the progress dialog's value a few times per second. 
// That will keep the busy indicator moving.
progressDialog.setValue(progressDialog.value() + 1);

// And check if the user has cancelled the processing
if (progressDialog.wasCanceled())
    break or return or whatever necessary


// When your processing is done, close the dialog.
progressDialog.close();

我不想隐藏它,我想在后台禁用它(而不是像idil一样隐藏),如果您将主窗口作为进度对话框的父窗口,并且进度对话框是模态的,那么进度对话框也应该始终位于主窗口的顶部。这很好,但是有没有办法用动画gif替换进度条?我不知道如何轻松地用gif替换进度条,但是我更新了我的答案,展示了如何使用QProgressDialog来显示忙碌状态,而不是处理步骤的百分比。我正试图像你说的那样实现QgraphicsBlueffect,但主窗口和处理窗口都有模糊效果。你知道为什么吗?