80년생 부근에서 태어나

 

컴퓨터를 접하고 살아가는

 

홍대에서 좀 놀아본 사람에게 익숙한 것들.

 

마치 나의 일상을 소재로 한 것이 아닌가 하는 착각이 들 정도이다.

 

민수가 일하던 편의점이나 기차길이었다 공원이 되는 그곳, 마포도서관 등등등.

 

하나만 빼면. 난 팝송을 듣지는 않으니까.

 

사람을 만나고 어떤 일이 벌어지고 그 일 속에 생겨나는 것.

 

모든 것을 퀴즈화 했다 작가는.

 

특정 상황에서의 정답은.

 

특정 문제에 대한 답.

 

그리고 유리와 같은 사람이 말하는 알에프론은 사실일까 아닐까.

 

회사는 진짜 일까 아닐까.

 

퀴즈인가 싶은걸 풀기도 하고 퀴즈가 아닌거 같으면서 퀴즈이고.

 

중요한 것은 민수가 특정상황에서 늘 자신에게 주는 답.

 

즉, 밝은 면을 애써 어둡게 보면서 나머지 부족한 부분에 대한 자기 합리화.

 

그걸 하나씩 극복해나가는 일종의 성장소설일수도 있다.

 

남자 많고 엄격하였으며 잘나갔던 여배우인 할머니인 최여사와 빛나와의 이별후에 민수는

 

점점 자기의 자리를 아주 조금씩 찾아간다. 그리고 그 동선 옆에는

 

"벽속의 요정" 지원이가 있고.

 

by 무위자연 2015. 10. 28. 10:02

기존 클래스를 수정해서 추가하거나


수정하면 이런 애러가 보일 것이다.


클래스 명도 명확하고 정의 링크를 따라가도 있고


헤더파일도 정확하게 추가해도 날 것이다.


이건. 클래스 명을 정의하는 #define에 대한 내용이 구현된 클래스와 달라서 발생한다/


A라는 클래스를 추가하면 다음과 같은 형식이다/


#ifndef AAA_H

#define AAA_H


class AAA : public QObject

{

}

#endif // AAAA_H


수정을 하면 다음과 같은 상황이 발생할 수 있다.

#ifndef AAA_H

#define AAA_H


class AAC : public QObject

{

}

#endif // AAAA_H

이때 발생하는 애러가 Does not name a type 이다!

#ifndef와 #define 만 AAC로 바꿔주면 된다.


by 무위자연 2015. 8. 3. 13:55

QWidet을 상속 받은 클래스의 경우에

객체를 직접 사용하지 못하게 QT에서는 막고 있다.

그래서 그대로 사용하게 되면 다음과 같은 애러가 발생하며

해당 내용에 대해서 알기가 어렵다.

애러는 다음과 같이 난다.

C:\Qt\Qt5.4.1\5.4\mingw491_32\include\QtWidgets\qwidget.h:719: error: 'QWidget::QWidget(const QWidget&)' is private

     Q_DISABLE_COPY(QWidget)


C:\Users\User\Documents\xxxxxx\trunk\application\mainview\glucosedownloadlist.h:13: error: within this context

 class GlucosedownloadList : public QWidget, public UITableViewDelegate


그러므로 해당하는 경우에 객체를 직접 접근하지 말고 referece(포인터)를 이용해서 접근해서 해결한다.

       ^

                    ^

by 무위자연 2015. 7. 28. 20:39

go lang에서는 {}로 묶을 때 줄 바꿈을 하면 다음과 같은 애러가 나온다.


잘못된 예.

if usersummary.Cloud == "asc" 
 {

       //sqlQuery += " and cloud not like %" + usersummary.Cloud + "%"

 }

users\users.go:4879: missing condition in if statement

users\users.go:4879: usersummary.Cloud == "asc" evaluated but not used

정상적인 예

if usersummary.Cloud == "asc" {
                //sqlQuery += " and cloud not like %" + usersummary.Cloud + "%"

            }


by 무위자연 2015. 6. 19. 12:11

1. 소스를 빌드를 한다


- 다국어 지원을 위한 QT Liguist를 이용했다면 언어 파일의 update/release를 해줘야 한다


2. release 모드로 빌드한 폴더로 가서 "exe"를 제외하고 모두 삭제한다.

- 실행을 위한 추가적인 파일/dll이 있다면 빌드한 폴더에 추가한다


3. Qt 5.4 for Desktop (MinGW 4.9 32 bit)을 이용하여 command 창을 띄우고 빌드 된 폴더로 이동한다.

“windeployqt XXXXXXX.exe” 를 입력한다

- 이렇게 하면 반드시 필요한 .dll(대부분의 QT dll)이 포함된 상태로 된다.


4. 3번의 폴더를 패키징을 위한 프로그램으로 패키지를 만들거나 해당 폴더를 복사해서 실행하면

QT 환경을 따로 구축하지 않아도 정상적으로 실행되게 된다.


by 무위자연 2015. 6. 10. 17:38


//기본 클라이언트의 실행 파일 주소를 알수 있다.

QSettings settings("HKEY_CLASSES_ROOT\\mailto\\shell\\open\\command",QSettings::NativeFormat);
QString value = settings.value(".").toString();

//실제 가져와 보면 이런 값들이 있다.

"C:\PROGRA~1\MICROS~1\Office15\OUTLOOK.EXE" -c IPM.Note /mailto "%1"


이걸 직접 쓰는데는 문제가 있어서 난 이렇게 했다.


QProcess process;

        QString program;//

value.replace("\"",""); //레지스트리 값의 따옴표 제거

value.replace("\\","\\\\"); //경로 구분자 변경

value.replace("/mailto",""); //제거

        value.replace("%1","");//제거
        value.replace("-c","");//제거
        value.replace("IPM.Note","");//제거

        program = value;

QStringList attach = QStringList()<<"/c" << "ipm.note"<<"/a" << "C:/valid.png";//이미 레지스트리에 있는 값 중에 내가 원하는 인자를 string list로 추가함

        process.start(program,attach);

process.waitForFinished();//해당 코드는 OS 환경에 따라서 필요 없기도 하지만 난 무조건 추가한다.



by 무위자연 2015. 5. 7. 16:50

별거 아닌데 찾기가 어렵더라고


특별한 것도 아닌데 process를 쓰라니,. batch 파일을 쓰니 하지만


제일 간단한건.


하기와 같이 2줄이면 끝.


QProcess::startDetached(QApplication::applicationFilePath());
exit(12);


참 쉽죠잉~

by 무위자연 2015. 4. 17. 17:23

Installshield(IS)가 windows only 라면


installanywhere(IA) 는 multi platform을 지원하는 패키지이다.


그런데 근자에 봉착한 문제는 패키지를 설치하면서 각종 sub로 실행되어야 하는 스크립트를 


installanywhere(IA)에서 해야 하는 문제였다.


많은 동작들이 있을수 있다.


파일 복사 / 폴더 확인 / 다른 실행 파일 실행(예를 들어 드라이버 등) installshield(IS)는 비교적 많은 자료가 있지만


installanywhere(IA)는 자료가 별로 없다.


가장 하고 싶었던 동작은 installshield(IS)에서의 launchappandwait였다 


그래서 내가 한 방법은 


Top menu에서 "Sequence"  > "Add action" > "Execute Command"를 추가하고


하단에 보면 설정할 수 있다. 


이때 batch 파일을 만들어서 실행시키거나 "exe"를 실행시키면 된다


옵션을 "Suspent installation until process complete"을 선택하면 원하는 동작이 마칠때까지 installanywhere(IA)는 대기하며


"Show indeterminate dialog"하면 해당 작업이 수행됨을 대기하고 잇는 다이얼로그가 뜨게 된다,


해당 배치가 실행됨은 installanywhere(IA) 하단 분에 메세지를 확인하면 된다.


주의 할 것은 설치된 폴더에 해당 배치 파일이나 exe 파일이 있는지 혹은 환경변수에 의한 동작인지 확인해야 하며


설치된 폴더에 같이 있는 파일의 경우에 CMD /C "$USER_INSTALL_DIR$$/$CDM20828_Setup.exe" 같이 넣어줘야 한다.


주석(comment) 내가 사용한 환경은 Installanywhere 2013 version 임을 밝혀둔다.

by 무위자연 2015. 4. 10. 17:58

QT에서는 그룹 내 라디오 버튼 중에 반드시 하나는 선택되어야 한다


그래서 다음과 같은 코드가 안 먹는다.


예를 들어


ui->radio1->setcheck(false);

ui->radio2->setcheck(false);

ui->radio3->setcheck(false);

한번이라도 이 그룹의 라디오버튼이 클릭된 상태라면

상태가 변하지 않는다 그룹으로 묶여있기때문에.


그러므로 전체가 선택 안된 상태 혹은 모두가 선택된 상태를 만들기 위해서는 잠시 그룹을 끊어야 한다.


다음과 같이 

theSelectedButton->setAutoExclusive(false);
thsSelectedButton->setChecked(false);
theSelectedButton->setAutoExclusive(true);
각 버튼 별로 해서 상태를 바꾼 다음에 다시 묶어주면 끝


by 무위자연 2015. 3. 17. 18:01

QTextStream outstream(&outputFile);

QTextCodec *codec = QTextCodec::codecForLocale();

QString name = "김동현";

outstream << codec->toUnicode(name.toLocal8Bit()) << ",,";

outputFile.close();

by 무위자연 2015. 3. 17. 10:30