QtTelnet

       学习qttelnet-2.1_1-opensource。

1、  QSocketNotifier的使用

        QSocketNotifier在该类中使用的目的是用于:监听socket的exception。

        但:QTcpSocket and QUdpSocket provide notification through signals, so there is normally no need to use a QSocketNotifier on them.

         也就是说:QTcpSocket已经提供有readyRead()、error()的signal函数来监听是否可以读数据、是否有Exception;且该类中只使用了QTcpSocket来实现Telnet。

         因此,QtTelnet类中对QSocketNotifier的操作是多余的?

2、  Close

         1)QtTelnet::close()可以通过调用QtTelnetPrivate::socketConnectionClosed来实现,以增加code reuse。

         2)loggedOut可能被emit两次。

       该类中,在外部调用QtTelnet::close()时,loggedOut()信号会被emit两次。因为在QtTelnet::close()会调用“d->socket->close();”------关闭socket------触发QtTelnetPrivate::socketConnectionClosed------emit loggedOut(),而QtTelnet::close()也会emit  loggedOut()。

         可以将QtTelnet::close()中的emit  loggedOut()删除掉,以解决该问题?

3、  QtTelnet类和QtTelnetPrivate之间的关系

        类QtTelnetPrivate里含有指向QtTelnet的指针;类QtTelnet里又含有指向QtTelnetPrivate的指针。为什么会这样定义?

         QtTelnetPrivate名字中“private”的含义可能就在于QtTelnetPrivate是QtTelnet私有的,即只能由QtTelnet使用。此处实现的关键在于:QtTelnet构造函数中对指向QtTelnetPrivate类的指针的初始化。以下是QtTelnet的构造函数:

QtTelnet::QtTelnet(QObject *parent)
    : QObject(parent), d(new QtTelnetPrivate(this))
{
}

4、  QtTelnet的signal函数message()

         该函数再QtTelnet的成员函数里并没有用到,而是在QtTelnetPrivate::parsePlaintext()里被emit,那为什么不直接把message()定义在QtTelnetPrivate类里?

        经试验,不可以。

         因为developer只能使用QtTelnet而不能使用QtTelnetPrivate,QtTelnet是由QtTelnetPrivate composition成的,developer的connect()只能使用QtTelnet里的函数。



 

你可能感兴趣的:(QT)