QT 프로그래밍 발표: 김래영
소개 사용자 정의 슬롯 QT 디자이너 Qt/Embedded 포팅
사용자 시그널 정의 Qapplication::quit() 사용자 정의 슬롯으로 구현 Exit.h file #include <qobject.h> class Exit : public QObject { Q_OBJECT public: Exit(); public slots: void myQuit(); };
사용자 시그널 정의 #include "Exit.h" Exit::Exit() { } void Exit::myQuit() { exit(0); } int main(int argc, char **argv) { QApplication a(argc, argv); QPushButton quit( “Quit”, 0 ); Exit *exit = new Exit; QObject::connect (&quit, SIGNAL(clicked()), exit,SLOT(myQuit()) ); a.setMainWidget( &quit ); quit.show(); return a.exec(); } “exit.cpp”
사용자 시그널 정의 컴파일후 생성되는 파일( tmake사용) 커스텀 시그널,슬롯 Q_OBJECT 매크로 컴파일 방법 moc_exit.cpp moc_exit.o 커스텀 시그널,슬롯 moc 이용 C++이 알수 있는코드로 변환 Q_OBJECT 매크로 컴파일 방법 Q_OBJECT 매크로는 헤더 파일에 작성 구현부분은 소스(.cpp) 파일에 작성 progen , tmake 사용
QT 디자이너 디자이너는 *.ui 파일을 생성 ui 파일은 HTML 형식 <!DOCTYPE UI> <UI> <class>MyForm</class> <widget> <class>Qwidget</class>
QT 디자이너 *.ui 파일 컴파일 방법 uic 를 사용하여 *.h *.cpp 파일 자동 생성 Ex) myform.ui 가 보관된 디렉토리에 myform.pro 파일 생성 #qmake –project main.cpp 생성 uic 를 사용하여 *.h *.cpp 파일 자동 생성 #uic –subdecl MyFormImpl myform.h myform.ui >myfprmimpl.h #uic –subimpl MyFormImpl myform.h myform.uii > mufprmimpl.cpp tmake 로 Makefile 생성
QT Embedded 포팅 Embedded 포팅 순서 커널 포팅 Qt/Embedded 포팅 Application 포팅
커널 포팅 크로스 컴파일러 커널 컴파일 루트 이미지 설치 < 커널 포팅 흐름 >
Qt/Embedded 포팅(1) Qt/Embedded 라이브러리 ARM 용으로 컴파일 Cross 컴파일러 사용 Download ftp://ftp.netwinder.ort/users/c/chagas ftp://ftp.netwinder.ort/users/r/rtvanals
QT Embedded 포팅(2) 환경설정 새로운 경로에 Qt/Embedded 설치 Makefile 수정 ~/arm/qt-2.3.2 디렉토리( QTDIR ) Makefile 수정 sub-tutorial sub-example 삭제 ( Line 11 ) 라이브러리만 컴파일 $QTDIR/configs 수정
QT Embedded 포팅(3) Config 파일수정 linux-arm-g++-shared SYSCONF_CXXFLAGS_QT = -I/$(QTDIR)/incude –I/usr/local/arm-linux/include SYSCONF_LINK_LIB_SHARED = … -L/usr/local/arm-linux/lib … ./configure –xplatform linux-arm-g++ libqte.so.2.3.2 생성 확인
Application 포팅 tmake 설정 export TMAKEPATH= export QTDIR=~/arm/qt-2.3.2 ~/tmake-1.8/lib/qws/linux-arm-g++ ( 컴파일 후 파일 전송 실행 )
Application 포팅 #include "entry.h“ #include <qapplication.h> Entry::Entry(){ layout = new QGridLayout(this); layout->setMargin(4); layout->setSpacing(4); addEntry(0,0,"name"); addEntry(1,0,"addr"); addEntry(2,0,"Tel"); addEntry(2,2,"Email"); QPushButton *button=new QPushButton("reg",this); button->setFixedSize(button->sizeHint()); layout->addMultiCellWidget(button,3,3,0,3); } < entry.cpp >
Application 포팅 void Entry::addEntry( int row, int col, const QString& tag) { QLabel* label=new QLabel(tag,this); layout->addWidget(label,row,col); QLineEdit *lineedit = new QLineEdit(this); if (row==1) layout->addMultiCellWidget(lineedit,1,1,1,3); else layout->addWidget(lineedit,row,col+1); label->setBuddy(lineedit); } <entry.cpp>
Application 포팅 progen entry.cpp > entry.pro tmake entry.pro >Makefile (tmake 사용전에 환경변수를 ARM 용으로 설정) make 바이너리 확인 arm-linux-strip Target board로 전송
실행화면 SHARP SL-5500 에서 실행한 화면