Qt Programming memo

[個人メモ] [仕事メモ] [アイデア] [Rubyの魔神]
[Qt2クラス索引] [Qt基礎] [QFile] [Qt関連(SRA)] [Qtユーザフォーラム]
[Qt4tutorial] [入門Qt4プログラミング(英語版)] [Qt 4 @ Qt - Linux Life] [Qt2の本(PDF)] [Qt4.6リファレンス]
[The Linux Serial Programming HOWTO] [Qt Programming]
 | 

2010-03-08

WindowsQt Creator(mingw版)で作ったファイルを配布するために必要なDLL 10:40

C:\Qt\2010.02.1\qt\bin

の中の

libgcc_s_dw2-1.dll

mingwm10.dll

QtCored4.dll

QtGuid4.dll

をexeと同じフォルダに入れると起動した。

エラーが出る毎にDLLを探して入れてみたが、自動で探してくれる方法は無いかな?

RS232Cの指定方法 10:35

./gdbserver /dev/ttyS3 --attach PID

target remote /dev/com3



[]メッセージボックス

#include <qmessagebox.h>
    QMessageBox::information( this, "Application name",    "Unable to find the user preferences file.\n",  "The factory default will be used instead." );

[]スレッド

#include<qthread.h>
                                                            
class MyThread : public QThread{
public:
        virtual void run();
};
                                                            
void MyThread::run()
{
        for(int count = 0;count < 20;++count){
                sleep(1);
                qDebug("Ping!");
        }
}
                                                            
int main(int argc,char *argv[])
{
        MyThread a;
        MyThread b;
        a.start();
        b.start();
        a.wait();
        b.wait();
                                                            
        return 0;
}

cygwinRS232C通信ソフトサンプル 10:49

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>


#include<string.h>

#define BUFSIZE 256

static int fd;

/***********************************************************************
[機能]UART初期化
[関数名]int initUart(int comNo)
[入力]COM番号
[出力]0:正常 0以外:エラー
[備考]
***********************************************************************/
int initUart(int comNo)
{
	char devName[256];
	
	sprintf(devName,"/dev/com%d",comNo);
	
	fd = open(devName,O_RDWR);
	if(fd<0){
		perror("COM OPEN ERROR\n");
		return 1;
	}
	return 0;
}

/***********************************************************************
[機能]UART出力
[関数名]int writeUart(char *s)
[入力]s:出力する文字列
[出力]出力した文字数
[備考]
***********************************************************************/
int writeUart(char *s)
{
	return write(fd,s,strlen(s));
}

/***********************************************************************
[機能]UART出力(バイナリ)
[関数名]int writeBUart(char *s,int size)
[入力]s:出力する文字列,size:出力データ長
[出力]出力した文字数
[備考]
***********************************************************************/
int writeBUart(char *s,int size)
{
	return write(fd,s,size);
}

/***********************************************************************
[機能]UART入力
[関数名]int readUart(char *s,int size)
[入力]s:受信する文字列,size:受信文字数
[出力]受信した文字数
[備考]sは呼び出し側で実体を用意すること。size以上のバイト数があること
***********************************************************************/
int readUart(char *s,int size)
{
	memset(s,0,size);
	return read(fd,s,size);
}

cygwinRS232C通信サンプル 11:22

Qt4でWindowsmingw使っているなら、cygwin互換があると思うので、

http://www.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO-3.html#ss3.2

の「非カノニカル入力処理」をベース

http://www.h3.dion.ne.jp/~unisoft/answer/sample01.html

こちらを見ながら、変更

変更したのは以下の通り

これがLinuxcygwinで異なる点

//#define MODEMDEVICE "/dev/ttyS1"
#define MODEMDEVICE "/dev/com3"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>

//#define BAUDRATE B38400
#define BAUDRATE B2400
//#define MODEMDEVICE "/dev/ttyS1"
#define MODEMDEVICE "/dev/com3"
#define _POSIX_SOURCE 1 /* POSIX 準拠のソース */
#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE; 

main()
{
  int fd,c, res;
  struct termios oldtio,newtio;
  char buf[255];

 fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
 if (fd <0) {perror(MODEMDEVICE); exit(-1); }

 tcgetattr(fd,&oldtio); /* 現在のポート設定を待避 */

 bzero(&newtio, sizeof(newtio));
// newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
 newtio.c_cflag = BAUDRATE | CLOCAL | CREAD;

 newtio.c_cflag |= CS8;          // 送受信に8ビット
 newtio.c_cflag &= ~CSTOPB;      // 送受信にストップビットを1
 newtio.c_cflag |= PARENB;       // 送受信にパリティチェックを行う


 newtio.c_cflag &= ~PARODD;      // 送受信に偶数パリティを使用する

 newtio.c_iflag = IGNPAR;
 newtio.c_oflag = 0;

 /* set input mode (non-canonical, no echo,...) */
 newtio.c_lflag = 0;
 
 newtio.c_cc[VTIME]    = 1;   /* キャラクタ間タイマ1/10s単位 */
 newtio.c_cc[VMIN]     = 1;   /* 1文字受け取るまでブロックする */

 tcflush(fd, TCIFLUSH);
 tcsetattr(fd,TCSANOW,&newtio);


 while (STOP==FALSE) {       /* 入力ループ */
   res = read(fd,buf,255);   /* 5 文字入力されたら戻る */
   buf[res]=0;               /* printf を使うために文字列終端をセット */
//   printf(":%s:%d\n", buf, res);
//   printf("%02X ", buf[0]);
   printf(":%02X:\n", (unsigned char)buf[0]);
   if (buf[0]=='z') STOP=TRUE;
 }
 tcsetattr(fd,TCSANOW,&oldtio);
}

CUIhello 17:04

#include <QtCore/QCoreApplication>
#include<iostream>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    cout << "Hello" << endl;

    return a.exec();
}

ゲスト



トラックバック - http://qtprogramming.g.hatena.ne.jp/garyo/20100308
 |