我正在使用Qt框架,并且我正在寻找最好的方法来向用户展示Im正在处理一些东西。
在Qt中,我可以:
将主窗口放在后台,并弹出窗口到前台,例如“处理”消息
在完成处理之前,“处理”窗口将关闭,主窗口返回到前台。
发布于 2010-09-03 00:26:21
使用QProgressDialog。它就是为这种用途而设计的。您可以将QProgressDialog用作模式对话框,从而阻止用户与主窗口进行任何交互。QProgressDialog还为您提供了一种简单的方式来显示处理进度,并提供了一个用于中止处理的可选按钮。
编辑:
QProgressBar可以在两种状态下使用:分步进行或仅显示忙碌状态。
QProgressDialog的进度条不能用于显示忙碌状态,因为这需要将QProgressDialog的最小值和最大值设置为0,这会立即关闭进度对话框。但是,您可以使用setBar()-function为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();发布于 2010-09-02 20:25:31
你可以试一试:
在调用弹出窗口的函数中,只需隐藏主窗口,一旦进程弹出displayed.
Show()。如果您还没有为此预定义信号,请创建一个并发出它。emit NameOfSignal;
希望这能有所帮助
编辑:
要禁用主窗口,请使用setDisabled而不是hide,使用setEnabled而不是show。
发布于 2010-09-02 21:05:58
你可以给你的"Processing"-window设置Qt::WindowStaysOnTopHint,让它停留在被禁用的主窗口之上。
如果你不喜欢它,你可以在处理窗口在顶部时使用QGraphicsBlurEffect模糊你的主窗口。这样,在处理完成之前,用户会认为主窗口是不可访问的。
https://stackoverflow.com/questions/3626946
复制相似问题