hakeの日記

Windows環境でプログラミングの勉強をしています。

C++でQTアプリ(その8) QCopメッセージ送信

昨日作成したrcvqcopにメッセージを送信してみる。
ボタンRaiseを押すとメッセージraise()が送信される、ボタンMessageではtest(QString)が引数付きで送られる。いずれもrcvqcopが起動していない場合はメッセージ受信により起動する。
メッセージの送信にはQCopEnvelopeを使用。リファレンスを見るとQCopChannel::sendでも送信ができそうで実際コンパイルも通ったが動作はしなかった。
なお、通常ターミナルでアプリ起動に使用するメッセージ

QPE/System 'execute(QString)' rcvqcop

を送信してみたがQVGAモードで起動するような素振りをみせたけど起動しなかった。また、メッセージ中に指定している数の引数を付けないでメッセージを送信した場合Qtopiaが落ちたので注意が必要。引数が複数存在する場合は「<<」で接続していく。

sendqcop.h
#ifndef SENDQCOP_H
#define SENDQCOP_H

#include <qmainwindow.h>
#include <qhbox.h>
#include <qpushbutton.h>
#include <qpe/qcopenvelope_qws.h>
#include <qstring.h>

class SendQCop : public QMainWindow{
	Q_OBJECT
public:
	SendQCop(QWidget *parent = 0, const char *name = 0);
//	~SendQcop();
private:
	QHBox *h;
	QPushButton *pb1;
	QPushButton *pb2;

private slots:
	void slot_Raise();
	void slot_SendMessage();

};

#endif
sendqcop.cpp
#include "sendqcop.h"

SendQCop::SendQCop(QWidget *parent, const char *name)
		: QMainWindow(parent, name)
{
	setCaption("QCop Send Test");

	h = new QHBox( this );
	setCentralWidget( h );

	pb1 = new QPushButton(tr("Raise"), h );
	connect( pb1, SIGNAL(clicked()), this, SLOT(slot_Raise()) );
	pb2 = new QPushButton(tr("Message"), h );
	connect( pb2, SIGNAL(clicked()), this, SLOT(slot_SendMessage()) );
}

// 引数なしのメッセージ raise()
void SendQCop::slot_Raise()
{
	QCopEnvelope("QPE/Application/rcvqcop", "raise()");
} 

// 引数付きメッセージ test(QString)
void SendQCop::slot_SendMessage()
{
	QCopEnvelope env("QPE/Application/rcvqcop", "test(QString)");
	env << QString("Send QCop Message");  // 引数
}