Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
使用Qt4.7-dialog正在忙着加载一个大东西;如何禁用所有控件?_Qt_Dialog - Fatal编程技术网

使用Qt4.7-dialog正在忙着加载一个大东西;如何禁用所有控件?

使用Qt4.7-dialog正在忙着加载一个大东西;如何禁用所有控件?,qt,dialog,Qt,Dialog,[EDIT]-没有像我想象的那样使用禁用代码;适用于以下任何解决方案。 我有一个无模式的QT对话框,在其中可以操作各种用户设置。此外,它还可以保存和加载大型数据集,这可能需要几秒钟的时间。在主窗口下面(实时应用程序)有很多事情发生,这很好,交互也可以,但是在对话框中,我需要阻止用户交互 本质上,在加载期间,我不希望用户能够更改/影响无模式对话框中的任何控件(其中有很多) 有没有一种简单的方法可以用来完全禁用对话框的输入,直到加载完成,而不是单独禁用每一个对话框(或者如果这是唯一的方法的话,甚至是

[EDIT]-没有像我想象的那样使用禁用代码;适用于以下任何解决方案。

我有一个无模式的QT对话框,在其中可以操作各种用户设置。此外,它还可以保存和加载大型数据集,这可能需要几秒钟的时间。在主窗口下面(实时应用程序)有很多事情发生,这很好,交互也可以,但是在对话框中,我需要阻止用户交互

本质上,在加载期间,我不希望用户能够更改/影响无模式对话框中的任何控件(其中有很多)

有没有一种简单的方法可以用来完全禁用对话框的输入,直到加载完成,而不是单独禁用每一个对话框(或者如果这是唯一的方法的话,甚至是那种方式)

其中还有一个进度条,显示正在发生的事情,加载过程会不断更新进度条,因此需要继续工作

我试过这个

打开对话框时:

QDialog *window = this;
然后围绕负载:

window->setDisabled(true);
....
window->setDisabled(false);
…编译良好,运行时没有问题,但窗口未禁用

我还尝试:

window->setEnabled(false);
....
window->setEnabled(true);
…这似乎也没什么用

我也试过:

QList<QWidget*> list = window->findChildren<QWidget *>();
foreach(QWidget *qw, list)
{
    qw->setEnabled(false);
}
....
QList<QWidget*> list = window->findChildren<QWidget *>();
foreach(QWidget *qw, list)
{
    qw->setEnabled(true);
}
QList list=window->findChildren();
foreach(QWidget*qw,列表)
{
qw->setEnabled(错误);
}
....
QList list=window->findChildren();
foreach(QWidget*qw,列表)
{
qw->setEnabled(真);
}
…也不做任何事情。

基于Qt文档():

禁用小部件会隐式禁用其所有子部件。有可能 分别启用所有子窗口小部件,除非它们已 显式禁用


所以你们的代码片段基本上是以不同的方式做相同的事情,所以这似乎不是一个问题,对话的形式也不应该对这有任何影响。您如何加载/保存数据?如果您在单击插槽中执行此操作,那么您基本上是在阻止UI事件循环,这意味着UI没有周期来响应您的更改。如果你想把UI从后台动作中隔离出来,即使你在后台做了重启,它也会做出正确的反应,你应该考虑使用<代码> QRunnaby< /C>或<代码> QTrad 来将工作从UI线程中卸载。

对话框和主窗口在加载过程中保持完全的生存状态。您可以输入数据,单击小部件,在加载过程中对话框会正常响应。它得到了所有通常的IO。但我不想这样。对话框中有什么样的控件?您是使用Qt Forms Designer创建它还是在代码中构建它?顺便问一下,你为什么要这么做?QDialog*窗口=此;有各种各样的控制;表单设计者创建了它。文本输入控件、复选框、组框内的单选按钮。我这样做是为了让类在qdialog的实例上设置一个变量handy。我不确定“这”在某人点击加载按钮的情况下是什么意思;是对话框还是按钮?因为禁用任何东西都不起作用,所以我想它可能不是对话框,所以我在实例化对话框时就这样做了。但不管怎样都没什么区别。好了,开始工作了。实际上没有接到电话,叹气。非常感谢。