본문 바로가기

반응형

Programming

(171)
터치가 예민한 보드에서 사용할 클릭 가능한 ImageLabel 이미지가 많이 들어가고 각각 클릭 가능해야 하는 프로젝트를 진행하고 있습니다. QButton으로 모두 넣으니 리소스 문제로 보드에서 실행이 되지 않았습니다. 그래서 생각한게 QLabel로 대신하는 방법입니다. 문제는 QLabel 에는 clicked 라는 signal이 없어서 어떻게 클릭 여부를 체크해야하는 가? 입니다. QLabel이 상속받은 상위 클래스를 따라 올라가다 보면 QWidget 이라는 클래스가 있습니다. mouseMoveEvent(QMouseEvent*); mousePressEvent(QMouseEvent*); mouseReleaseEvent(QMouseEvent*); 아래 두개가 마우스 클릭과 관련된 이벤트 입니다. 사용하려면 QWidget을 상속받는 하위 클래스를 만들어야 합니다. QLa..
QT에서 undefined reference to `vtable 오류 클래스안에서 signals, slots를 정의하게 되면 Q_OBJECT 를 적어 줘야 합니다. Q_OBJECT를 사용하고 컴파일할때 undefined reference to `vtable 이와 같은 오류를 볼때가 있습니다. 검색을 해보니 virtual 함수를 정의해줘야 하는데 안해줘서 생기는 오류라고 합니다. 아무리 찾아봐도 오류가날 이유가 없습니다! 이럴때는 qmake를 다시 해주시고 make 해주시면 잘 됩니다. 이유는 저도 잘 모르겠네요 ^^; 아무래도 Q_OBJECT를 사용하면서 컴파일 옵션이나 라이브러리등이 변경되어서 그런게 아닐까..... 하고 혼자 짐작해 보네요.
signal, slot을 연결하는 connect 에서 오류 signal과 slot을 연결하는 connect 를 사용할때 컴파일은 성공하였으나 실행할때 sender 또는 receiver 를 못 찾는 경우가 발생할때가 있습니다. QObject::connect: No such signal Thread::setText(const QString&txt) QObject::connect: (sender name: 'unnamed') QObject::connect: (receiver name: 'frmTest') 이런 오류가 발생할 경우 정말 막막합니다..... 구글 검색을 통해 얻은 결과는 아주 간단한 것 입니다. 이런 오류는 매개변수가 있을 때만 발생하며 매개변수의 타입은 쓰고 이름은 쓰지 말아야 합니다. connect( &thread2, SIGNAL(setText(con..
QThread 사용시 컴파일 오류 QThread를 사용하여 컴파일을 하면 thread1.h:12: parse error before `{' token thread1.h:13: virtual outside class declaration 이와 같은 오류가 발생합니다. progen으로 생성한 .pro 파일을 열어서 CONFIG += thread 를 해주고 qmake 하시면 컴파일시 qthread로 인한 오류가 발생하지 않습니다.
안드로이드 메모리 안드로이드 폰을 쓰다보면 이상한 점을 발견할 수 있습니다. 설치 용량은 149KB 였던 어플이 실행 후에 메모리 사용량을 확인해 보니 16.02MB ...... 무려 160배 가까운 차이를 보이고 있습니다.. 도대체 뭐 때문에 이렇게 많은 메모리를 잡아 먹나 하는 의문이 들었습니다. 친구는 Dalvik이 어플마다 실행되는 것 같다고 했지만 비효율적인거 같아서 아닐거라고 장담했지만... '인사이드 안드로이드 5장 Zygote' 를 보니 정말로 어플이 실행될 때마다 독립적인 Dalvik이 존재한답니다. 어플 실행시 Dalvik 실행, 모듈 링크 등의 과정을 빠르게 하기 위하여 Zygote가 존재하는데 이것 또한 Java로 작성된 프로그램이라 Dalvik이 먼저 실행되어야 한다고 합니다. init->app_p..
안드로이드 발신, 수신 통화 모니터링하기 BroadcastReceiver 를 이용하면 수신 전화를 모니터링할 수 있습니다. 이것은 네이버나 구글이나 어디서 검색하든지 쉽게 얻을 수 있는 정보 입니다. 하지만 발신 정보를 얻기란 정말 힘듭니다. 전화 상태로 발신을 구분을 할수 있습니다. 발신 : IDLE -> OFFHOOK -> IDLE 수신 : IDLE -> RINGING -> OFFHOOK -> IDLE 하지만 수신 번호가 아닌 발신 번호는 알 수 없습니다. 그래서 몇일 동안 검색을 통해 알아내었습니다. AndroidManifest.xml Log public class Log { private long id; private String number; private LogKind kind; public Log(String number, LogK..
Activity 타이틀바에 프로그래스바 위 사진과 같이 제목이 표시되는 타이틀바에 프로그래스바를 표시하고 싶을때는 다음과 같은 방법을 사용하면 됩니다. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main); } 위와 같이 해주면 타이틀바에서 progress 를 사용할 수 있습니다. 현재값은 다음과 같이 설정하면 됩니다. setProgress(progress); progress 값은 0~10000 까지이며 10000 이 되면 완료되어 progress 가 사라지게됩니다. 웹뷰를 쓸때 유용할 것 같습니다.
버전이름 가져오기 AndroidManifest.xml 에 보면 versionName 이라고 있습니다. 이 것을 실행 중에 가져오려면 다음과 같은 방법을 사용해야 한다고 합니다. String version = "0.0.0"; try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); version = pInfo.versionName; } catch (NameNotFoundException e) { e.printStackTrace(); }

반응형