일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker-compose
- Openswan
- AWS
- port
- 리눅스
- 우분투
- docker
- VIM
- window size
- ubuntu
- Chef
- sudo
- 드라이버
- opsworks
- RUBY
- DevOps
- VPN
- docker registry
- ssh
- VMware
- docker container
- 루비
- 도커
- QT
- driver
- ssh command
- Linux
- 방화벽체크
- 패키지
- golang
- Today
- Total
목록QT (25)
구리의 창고
메신저의 알림기능같은 다이얼로그는 작업표시줄에 뜨면안된다. (예: 대화알림, 쪽지알림 등등) 다른방법이 또 있을지 모르겠지만 나는 이렇게 해결했다. setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_ShowWithoutActivating); Qt::Tool 이 작업표시줄에 안뜨도록 도와준다. 그리고 Qt::WA_ShowWithoutActivating 은 포커스가 이동돼 유저가 방해받지 않도록 해준다.
프로그램을 만드는데 QMainWindow를 상속 받아 투명처리와 테두리를 없애고 타이틀바와 메뉴바를 붙이고 있다. * 투명처리와 테두리를 없애는 코드 setAttribute(Qt::WA_TranslucentBackground, true); setWindowFlags(Qt::FramelessWindowHint); 일단 QMainWindow의 기본적인 레이아웃은 아래와 같다. 해당 레이아웃은 (src/gui/widgets/qmainwindowlayout.cpp) 에 정의 돼 있다. 저 레이아웃에 정의 돼 있는 MenuBar 위치를 그대로 쓰게되면 타이틀 바를 넣을 수가 없으므로 기본적으로 제공하는 QLayout::setMenuBar() 함수는 쓸 수가 없다. QWidget 위에 타이틀바를 먼저 넣고 메뉴바를..
현재 개발환경 탓일지 모르겠으나 간략히 적어보면 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..
인터넷을 검색해보면 keyPressEvent 를 수정하라고 돼있다. 하지만 더 확실한 해결책은 reject를 오버라이딩 하는 것이다. void Dialog::reject() { if (isReject()) { QDialog::reject(); } } 응용해서 ESC를 누를 시 closeEvent를 발생시키고 싶으면 아래처럼 수정하면된다. void Dialog::reject() { close(); }
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); } }