当Qt信号/插槽连接失败时,如何收到警报?

xto*_*ofl 6 c++ debugging qt signals-slots qt5

我们使用的时候失去了很多的时间connect从/到一个不存在的信号/插槽,因为Qt的只是提醒我们在运行时某处控制台日志记录.

除了发展到QT5,它使用的类型系统报告,并从这些问题更改代码对所有connect的系统调用,有另一种方式拥有了Qt运行时如扔了,或者干脆死机,或者大声地提醒我,当连接错误了吗?

Nej*_*jat 3

您可以在连接上使用包装器,当某些连接失败时,该包装器会停止程序:

inline void CHECKED_CONNECT( const QObject * sender, const char * signal,
             const QObject * receiver,  const char * method,
             Qt::ConnectionType type = Qt::AutoConnection )
{
  if(!QObject::connect(sender, signal, receiver, method, type))
   qt_assert_x(Q_FUNC_INFO, "CHECKED_CONNECT failed", __FILE__, __LINE__);
}
Run Code Online (Sandbox Code Playgroud)

  • 看来 qt_assert_x 没有记录公共 API,所以我认为使用 Q_ASSERT 或 Q_ASSERT_X 更安全,而且:Q_ASSERT_X 已经解决了您的 _ _ FILE _ _ 和 _ _ LINE _ _ 和 noop 样板。这也可以避免额外的函数:`#define Q_ASSERT_X(cond, where, what) ((!(cond)) ? qt_assert_x(where, What,__FILE__,__LINE__) : qt_noop())` (2认同)