【发布时间】:2013-12-16 08:44:25
【问题描述】:
我有 2 个类:一个维护一些循环(至少 2-3 分钟;从 QObject 继承),另一个显示进度对话框(从 QDialog 继承)。 我想在显示对话框后立即开始循环。我的第一个解决方案是:
int DialogClass::exec()
{
QTimer::singleShot(0, LoopClassPointer, SLOT(start()));
return __super::exec();
}
从槽中抛出异常存在问题。所以我考虑让公共插槽start() 只是一个公共功能的可能性。但现在我不知道如何让它运作良好。像这样的事情:
int DialogClass::exec()
{
LoopClassPointer->start();
QApplication::processEvents();
return __super::exec();
}
不要帮忙。对话框不出现。 这种情况有通用的方法吗?
一些细节,根据问题:
我必须使用具有自己样式的系统,因此我们有一个通用的方法来创建任何对话框:从样式类继承它们,该样式类继承自 QDialog。
我的“LoopClassPointer”是从单独的 dll 导出的类(其中不支持 UI)。
我在主应用程序中有一个“开始”按钮,该按钮与一个插槽连接,该插槽可创建进度对话框和“LoopClassPointer”。目前我在对话框中发送“LoopClassPointer”实例,不想对架构进行重大更改。
【问题讨论】:
-
__super 是什么意思?您是否尝试访问由编译器创建和保留的对象?
-
不应该是其他方式吗?进程一开始就应该显示进度对话框?
-
这些对象是否都在同一个线程中运行?在您的代码中,不清楚您要做什么。不同对象之间通信的方式是将信号连接到插槽。因此,您会将 obj1 的一些信号连接到 obj2 中的一个插槽,并在 obj1 启动时发出信号……这就是您想要做的吗?
标签: qt exec progressdialog qdialog