ipcserver.cpp

来自「Linux下的基于X11的图形开发环境。」· C++ 代码 · 共 85 行

CPP
85
字号
#include "ipcserver.h"#include <qsocket.h>#include <qvariant.h>#include <qimage.h>#include <qpalette.h>#include <qapplication.h>class IpcSocket : public QSocket{    Q_OBJECTpublic:    IpcSocket( QObject *parent) : QSocket( parent )    {	packetSize = 0;	connect( this, SIGNAL(readyRead()), SLOT(read()) );    }signals:    void receivedText( const QString& );    void receivedPixmap( const QPixmap& );private slots:    void read()    {	Q_ULONG bytesAvail = bytesAvailable();	for ( ;; ) {	    if ( packetSize == 0 ) {		QDataStream ds( this );		if ( bytesAvail < 4 )		    return;		ds >> packetSize;		bytesAvail -= 4;	    } else {		if ( bytesAvail < packetSize )		    return;		// read the packet in a byte array to be sure that you don't		// read too much or too less		QByteArray ba( packetSize );		readBlock( ba.data(), packetSize );		bytesAvail -= packetSize;		packetSize = 0;		QVariant variant;		QDataStream ds( ba, IO_ReadOnly );		ds >> variant;		switch ( variant.type() ) {		    case QVariant::String:			emit receivedText( variant.toString() );			break;		    case QVariant::Image:			emit receivedPixmap( QPixmap(variant.toImage()) );			break;		    case QVariant::Palette:			QApplication::setPalette( variant.toPalette(), TRUE );			break;		    default:			break;		}	    }	}    }private:    Q_UINT32 packetSize;};IpcServer::IpcServer( Q_UINT16 port, QObject *parent ) :    QServerSocket( 0x7f000001, port, 1, parent ){}void IpcServer::newConnection( int socket ){    IpcSocket *s = new IpcSocket( this );    s->setSocket( socket );    connect( s, SIGNAL(receivedText(const QString&)),	    SIGNAL(receivedText(const QString&)) );    connect( s, SIGNAL(receivedPixmap(const QPixmap&)),	    SIGNAL(receivedPixmap(const QPixmap&)) );}#include "ipcserver.moc"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?