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]

2011-09-16

QT Cleator 15:32

Windows7VM Wareでubuntu8.04を入れて使っていた。(10.4が見つからなかったので)

QT Cleatorも入れてみた。

以下からBINファイルを落として、実行権限つけて実行すると入った。

http://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit

大分使い方を忘れていた。

  .uiファイルクリックしてデザイン画面を開き、オブジェクト右クリックして「スロットへ移動」を選ぶと、スロット一覧が出て、スロットを選ぶとそのコードソースに追加される。

また、ui-> でオブジェクトを参照できる。

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();
}

2010-03-07

[][][]Qt開発環境インストール 15:25

UbuntuOSに使っているNetWalkerQt Creatorが動くことを確認した。

NetWalker自体のCPUx86系ではないので通常のUbuntuソフトを持ってきても動かないが

Qt Creatorが動けばGUIソフトセルフコンパイルできる。

(通常なら母艦となるPC上でクロスコンパイルして入れる)

以下を実行して動くようになった。

sudo apt-get install qt-creator

sudo apt-get install qt4-dev-tools

sudo apt-get install g++

Dependency Walker 15:36

確かとはいえませんが、もしビルドしたパソコンと違うパソコンで実行しようとしてエラーが出たのならば、ほかに依存しているdllがあるのではないでしょうか。

Application Dependencies」に書いてある「Dependency Walker」で依存しているdllを調べられてはどうでしょうか。

ビルドした環境と、配布先として試した環境の両方で実行してみて、何か違いはないでしょうか。

Qt Users Forum Japan • トピック - exeファイルの配布

Dependency Walker

http://www.dependencywalker.com/

を使えばWindowsで関連しているDLLがわかるらしい

2010-03-05

Qt4で行カウンタ 12:47

テキストファイルを開いて行数を数えて表示するサンプル

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qfiledialog.h>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::on_action_Quit_triggered()
{
    exit(0);
}

void MainWindow::on_action_Open_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this,"OpenFile",".");
//    QMessageBox::information(this,"File Name",fileName);

    QFile f(fileName);
    if(f.open(QIODevice::ReadOnly)){
        QTextStream t(&f);
        QString s;
        int n = 1;

        while(!t.atEnd()){
            s=t.readLine();
            ++n;
        }
        f.close();
        QString mes;
        mes.sprintf("Line Count = %d",n);
        QMessageBox::information(this,"Line Count",mes);
    }

}

初めてのQT初めてのQT2012/06/15 22:47デバックコンパイルでERRがでます。なぜでしょう??
/root/couta-build-desktop/../couta/mainwindow.cpp:20: error: no ‘void MainWindow::changeEvent(QEvent*)’ member function declared in class ‘MainWindow’
/root/couta-build-desktop/../couta/mainwindow.cpp:32: error: no ‘void MainWindow::on_action_Quit_triggered()’ member function declared in class ‘MainWindow’
/root/couta-build-desktop/../couta/mainwindow.cpp:37: error: no ‘void MainWindow::on_action_Open_triggered()’ member function declared in class ‘MainWindow’
ERRの内容は上記です。
分かれば教えてください。

2010-03-04

[]QT Createrを使ってみた。 12:02


QtおよびQtCreatorのインストール

http://ashitani.jp/wiki/index.rb?p=Qt%E3%81%8A%E3%82%88%E3%81%B3QtCreator%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

こちらを参考にして

ボタンを押すと、テキストボックスの中身をメッセージボックスで表示するサンプル。

これができればまあ後はどうとでも。

#include<QMessageBox>
void Dialog::on_pushButton_clicked()
{
    QMessageBox::information(this,"MESSAGE",  ui->lineEdit->text());
}