일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sudo
- VPN
- port
- 우분투
- 패키지
- Chef
- 루비
- window size
- docker-compose
- ssh
- opsworks
- docker
- 드라이버
- ssh command
- driver
- Linux
- golang
- Openswan
- DevOps
- 방화벽체크
- AWS
- RUBY
- ubuntu
- docker registry
- 리눅스
- VMware
- QT
- 도커
- docker container
- VIM
- Today
- Total
목록QT (20)
구리의 창고
현재 개발환경 탓일지 모르겠으나 간략히 적어보면 AMD 쿼드코어 , 윈도우7 64bit , QT 4.7.3 을 쓰고있다. 사운드파일을 재생하려고하는 QSound가 작동을 안한다. 이유는 알 수 없다... 윈도우에선 QSound::isAvailable() 이 무조건 true 란다. 그래서 Phonon을 사용하기로 했다. 예제도 만들겸 알람 프로그램을 만들었다. 소스는 아래와 같다. 그리고 QT plugin을 쓰면 해당 dll 파일도 폴더에 맞게 넣어줘야한다. 궁금하면 첨부파일 다운로드 후 dll 파일 위치를 확인하자. Alarm.cpp #include "alarm.h" #include #include Alarm::Alarm(QWidget *parent, Qt::WFlags flags) : QMainWind..
sqlite를 사용하는 프로그래밍을 한 후 다른 컴퓨터에서 실행하면 아무 에러메시지도 출력하지도 않고 프로그램이 정상 실행되지 않는걸 발견 할 수 있다. sqlite 공홈에서 dll을 다운받아도 마찬가지고 QT 폴더에서 qsqlite4.dll 을 복사해와도 안된다. 이게 QT버그인지 아닌지는 모르겠으나.. 이럴 땐 폴더를 생성해줘야한다. qsqlite4.dll 은 %QTDIR%/plugins/sqldrivers에 존재한다. 그렇다면 dll 파일을 %YOURAPPDIR%/sqldrivers 아래에 넣어줘야한다. 만약에 QMovie같은 class를 쓴다면 imagesformats 폴더를 만들고 qgif4.dll을 첨부해줘야한다. 아무리 생각해도 이건 버그같다..
QT에 있는 SIGNAL SLOT을 쓰다보면 !! signal을 다른 개체로 통과시켜야 하는 경우가 있다. 아래와 같이 다이얼로그 위에 버튼이 있고 엔터를 치면 clicked() 시그날이 발생한다고 하자. 그렇다면 버튼이 발생시키는 시그날은 사실상 다이얼로그 밖에 알 수 없다. 이 때 발생한 시그날을 다른 슬롯에 연결하기 위해선 적절히 QObject::connect를 해줘야한다. 처음 생각한 방법은 Dialog.cpp QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(passClicked())); void Dialog::passClicked() { emit pushClicked(); } Controller.cpp QObject::connect(dia..
Model/View 프로그래밍을 하다보면 많은 정보들이 QModelIndex 형식으로 넘어온다. 그리고 그 index에 맞는 특정 column, row 의 정보가 필요하다. 아래와 같이 가져 올 수 있다. const QAbstractItemModel * model = index.model(); qDebug() data(model->index(row, col), Qt::DisplayRole); QVariant로 리턴되므로 입맛에 맞게 고쳐쓰면 된다. * QStandardItemModel 에는 itemFromIndex 라는 함수가 존재한다. QStandardItem * QStandardItemModel::itemFromIndex ( const QModelIndex & index ) const http://d..
QTableView 문서를 뒤적거려보면 setColumnWidth(int index, int width) 라는 함수를 발견 할 수 있다. http://doc.qt.nokia.com/4.7/qtableview.html 보통 QTableView를 쓰게되면 subclass 를 만들어서 아래처럼 그 안에서 초기화를 하게된다. TableView::TableView(QWidget* parent) : QTableView(parent) { model = new TableModel(); setModel(model); setColumnWidth(0, 30); } 하지만, setColumnWidth는 subclass 안에서 호출하면 작동하지 않는다. 아래처럼 TableView 로드가 끝나고 나서 불러야한다. TableVie..
QTreeView를 사용 할 때 checkbox를 사용하다보면 문제가 생긴다. 아이템과 마우스를 처리하면서 clicked 시그날을 사용 할 때가 있는데, 문제는 item을 클릭할 때와 checkbox를 클릭 할 때 체크되게 하는 경우이다. checkbox도 item으로 인식하기 때문에 check와 click이 같이 발생하게 되는것이다. 그래서 시그날이 발생하는 순서를 살펴봤다. * clicked 의 경우 mousePressEvent() -> mouseReleaseEvent() => clicked 발생 * checked 의 경우 (시그날은 아니지만) mouseReleaseEvent() => checked 발생 위와 같이 mouseReleaseEvent() 시에 checked와 clicked 가 같이 발생하..
QT 에 clicked() 라는 마우스 클릭시 발생하는 시그날이 있다. MFC에 익숙해져있다면 click은 보통 좌클릭을 생각 할 것이다. 이럴 때 우클릭 이벤트를 막아야한다. mousePressEvent 를 받아서 우클릭이면 ignore 시킨다. 아래는 QTreeView 의 경우를 예를 든 소스이다. void OrganizationTreeView::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::RightButton) { event->ignore(); } else { QTreeView::mousePressEvent(event); } }
메신저나 기타 위젯들을 보면 파일을 끌어다놓고 실행하거나 파일전송을 한다. QTextEdit 도 drag & drop 을 지원하긴 하는데 !! 파일은 드롭 불가표시가 뜨고만다. 이 부분을 해결하려면 Qt 에 있는 수 많은 예제들에서 찾기 힘든데~ canInsertFromMimeData를 상속받아서 원하는 필터를 추가해주면된다. TextEdit::TextEdit(QWidget* parent) : QTextEdit(parent) { setAcceptDrops(true); } bool TextEdit::canInsertFromMimeData(const QMimeData* source) const { return source->hasUrls() || QTextEdit::canInsertFromMimeData(s..
QObject를 상속받아서 class를 구성 할 경우 주의해야 할 점이 있다. 코딩 하다보면 위와 같은 에러가 뜨는 경우를 볼 수 있다. 'QObject::QObject' cannot access private member declared in class 'QObject' 오오오오.. 이게 무슨 에러신가...ㅠㅠㅠ 하면서 알아봤는데, 복사생성자를 사용하면안된다. QObject에는 구현돼있지 않나보다. 복사생성자를 쓰지말던지, 모든 객체를 new로 생성해서 넘겨줘야한다. class MyObject : public QObject { } 와 같이 class를 구현했다면 MyObject obj; // 에러 MyObject* obj = new MyObject(); // 정상
QSet 와 QLIst의 가장 큰 차이는 중복의 허용이다. QList list; list