【发布时间】:2017-05-12 12:53:49
【问题描述】:
我试图将我的问题分解为一个小例子。真正的问题是更复杂的通信:
我有一个触发通信并连接并向服务器发送消息的功能。如果有答案,客户端类会发出一个包含答案的信号。
void communicate()
{
client.setUpMessage(); // the answer is emitted as a signal and
// and processed in the Slot
// 'reactToAnswer(...)'
client.sendMessage("HelloWorld");
}
void reactToAnswer(QString answer)
{
parser.parseAnswer() // an error could occur
}
如果在处理响应的槽中检测到错误怎么办?我想停止执行函数communicate()。这意味着不应再执行函数client.sendMessage("HelloWorld")。
我天真地尝试用异常处理问题:
void communicate()
{
try
{
client.setUpMessage(); // the answer is emitted as a signal and
// and processed in the Slot
// 'reactToAnswer(...)'
client.sendMessage("HelloWorld");
}
catch(myException)
{
// do something
}
void reactToAnswer(QString answer)
{
if( !parser.parseAnswer() )
{
throw myException;
}
}
这不起作用,从 qt 信号调用的插槽中抛出异常是未定义的行为。 usual way 是重新实现 QApplication::notify() 。 QCoreApplication()::notify,但这对我不起作用。 GUI 已经有一个 QApplication,我希望通信类 (QObject) 独立存在。所有的事情都应该在这个类中处理。
我希望我能通俗易懂地解释这个问题。在任何情况下我都不想使用异常,其他停止通信的方式也适合我。
提前致谢!
【问题讨论】:
-
@KubaOber 感谢您的评论,但这对我不起作用。我编辑了描述并解释了我的情况有什么不同。
-
我猜this question 更接近你所追求的,那么。
标签: c++ qt exception qt-signals