• 4428阅读
  • 2回复

connect 可以连接 两个signal? [复制链接]

上一主题 下一主题
离线cyberpunker
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-04

   这是什么搞法?

  在 StdoutRedirector 里竟然看到了 :
   connect(pipeReader, SIGNAL(readyRead()), this, SIGNAL(readyRead()));


StdoutRedirector::StdoutRedirector(QObject *parent, ProcessChannels channels) :
    QObject(parent), m_channels(channels)
{
#ifdef Q_OS_WIN
    createWinPipe(hRead, hWrite);
    if (m_channels & StandardOutput)
        ::SetStdHandle(STD_OUTPUT_HANDLE, hWrite);
    if (m_channels & StandardError)
        ::SetStdHandle(STD_ERROR_HANDLE, hWrite);

    int fd = _open_osfhandle((intptr_t)hWrite, _O_WRONLY|_O_TEXT);
    if (m_channels & StandardOutput)
        _dup2(fd, 1);
    if (m_channels & StandardError)
        _dup2(fd, 2);
    _close(fd);

    pipeReader = new QWindowsPipeReader(this);
    pipeReader->setHandle(hRead);
    pipeReader->startAsyncRead();
    connect(pipeReader, SIGNAL(readyRead()), this, SIGNAL(readyRead()));
#else
    ::pipe(pipeEnds);
    if (m_channels & StandardOutput)
        ::dup2(pipeEnds[1], 1);
    if (m_channels & StandardError)
        ::dup2(pipeEnds[1], 2);
    ::close(pipeEnds[1]);

    buffer = new QRingBuffer();
    socketNotifier = new QSocketNotifier(pipeEnds[0], QSocketNotifier::Read, this);
    connect(socketNotifier, SIGNAL(activated(int)), this, SLOT(onSocketActivated()));
#endif
}
离线dbzhang800

只看该作者 1楼 发表于: 2014-05-04
这是正常用法,在Qt4时代,信号只可以和 SIGNAL,SLOT,METHOD 3种东西相连。而到了Qt5时代,可以连接的东西就更多了
离线roywillow

只看该作者 2楼 发表于: 2014-05-04
我记得Qt4时代两个信号就能连接了,可以一个信号发出后去激活另一个信号的发出
好像Qt5连普通函数都能connect了?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个