Project -> Build Steps -> Make : mingw32-make -> 옵션 -j [#] 추가하면 됩니다


QT Creator의 컴파일러를 mingw를 사용할 경우에


하기와 같이 컴파일러가 사용할 CPU 코어수를 추가해주면 된다.


해당 CPU수는 VIRTAUL CPU를 적당히 감암해서 사용한다


명령어 cmd : -j core# / 


내 경우에는 i-7 4 VCPU / 2CPU라서 3개 정도만 할당해서 사용한다


그럴 경우에 rebuild 할 경우에 1 코어때는 3:05 초 정도 걸리는 것이 3개를 사용하면 1:50초 정로로 빨

라진다.




by 무위자연 2015. 3. 10. 09:50

1. hex 값이 들어 있는 QbyteArray를 String으로 만들 때

QString temp = QString(tarr.toHex());

QString().sprintf 으로 할려니까 노답.


2. hex값 들이 나열된 string을 int로 바꿀 때

qint64 tvalue = temp.toInt(&ok, 16);

3. Windows의 localtime32로 생성한 데이터를 바이너리 데이터로 저장하고 QT에서 읽어올때

1,2번을 거쳐서 만든 값은 sec 값으로서 해당 값에 1000을 곱해준 다음에 밀리세컨드를 시간으로 변경해주는 함수를 사용한다.

QDateTime datatime = QDateTime::fromMSecsSinceEpoch(tvalue * 1000);

4. 10진수 값을 hex string으로 만들때.

QString::number(temp_number[1], 16)

만일 이 값의 "0"으로 자릿수를 맞추면서 hex로 변환한다고 한다면

QString("%1").arg(temp_number[1], 2, 16, QLatin1Char( '0' )).toUpper()


by 무위자연 2015. 3. 3. 15:42

QObject를 상속 받은 클래스면 구현이 가능하다.


원하는 동작을 정의하고 해당 동작이 SIGNAL로써 call이 되며


해당 함수는 인자를 가질수 있고 그 인자가 SLOT의 input argument가 된다.


이때 주의할 것은 int 같은 기본 형은 그대로 인자로 사용할수 있으나 QJsonObject 와 같은 형태는 레퍼런스(reference)로 넘겨야 한다 그렇지 않을 경우에 하기와 같은 애러가 발생하는데 그 내용이 이것임을 알기가 어렵다.

"invalid use of incomplete type 'class QJsonObject...@ moc_.....cpp

(전체 애러 상황은 첨부파일을 참고 부탁드립니다) 


SIGNAL 시그널 은 "emit" 함수를 통해서 발생시킨다.


이벤트 발생 예.

emit executeCmd(&jsonObject);


헤더 파일 예.

class SLObject : public QObject
{
    Q_OBJECT
public:
    explicit SLObject(QObject *parent = 0);
    ~SLObject();

    void sendCmd(QString cmdStr);

signals:

    void executeCmd(QJsonObject* jobj);


상기와 같이 정의된 클래스를 쓸때는 다음과 같이 사용한다.,

 SLObject *temp = new SLObject(); // 클래스 객체 생성

connect(temp, SIGNAL(executeCmd(QJsonObject*)),this, SLOT(on_test_getuserinfo(QJsonObject*))); // 정의한 시그널을 원하는 슬롯에 connect 한다.

실제 슬롯에서는...

이때 시그널에서 emit한 인자가 슬롯의 input으로 들오옴을 화인할 수 있다.

void UserInformation::on_test_getuserinfo(QJsonObject* json)

{

    // QJsonObject jsonObject = *json;

    ui->userNameEdit->setText((*json)[QString::number(0)].toObject()["user_name"].toString());


19.5.22 추가

QObject를 상속만 받고 class 정의에 "Q_OBJECT"를 추가하지 않으면 다음과 같은 에러가 난다. moc_ 파일 빌드 문제도 아니고 원인을 알기가 어렵다.

에러 Unresolved external symbol on signals



by 무위자연 2015. 2. 25. 14:20

일반적인 파일 저장은 fopen / fprintf / fclose를 이용한다.


m_result_file = fopen(".\\DATA\\data.csv", "a");

if(m_result_file != NULL)

{

fprintf(m_result_file, 변수1, 변수 2 ... 등등 + CString("\n")

);

fclose(m_result_file);

}


해당 코드로는 CString을 이용한 파일 쓰기가 안되고 구글 검색 시에 나오는 파일 쓰기는 오류 등이 있다,

그래서 구글링 결과 다음과 같이 처리할 경우에 문제가 없어서 남겨둔다.


추가 팁으로 파일 존재 유무 코드가 있다.


WIN32_FIND_DATA finddata;

ZeroMemory(&finddata, sizeof(finddata));

HANDLE hExist = FindFirstFile(filepath, &finddata);

if(hExist == INVALID_HANDLE_VALUE) {

//이 경우에 파일이 없다는 뜻.

}

TCHAR *szPath;

int nLen;


TCHAR szTemp[2];

WORD wd = 0xfeff;

memcpy(szTemp, &wd, 2); // CString 변환하여 파일에 쓸 경우에 반드시 open 후 첫번째 이 문자열을 넣어줘야 한다.

csvfile.Write(szTemp, 2);

titleStr.Format(_T("~~~~~~~~~~~~~~~~~~~~~~~~~~~~")); //CString을 적당히 편집한다.

szPath = new TCHAR[titleStr.GetLength() + 1];


_tcscpy(szPath, titleStr);


nLen = _tcslen(szPath);


csvfile.Write(szPath, nLen * sizeof(WCHAR));


csvfile.Close();

잘 써짐. 기존에서는 CSV의 컬럼 구분자가 ","였으나 이렇게 사용할 경우에 "\t"이 구분자가 되니 참고 한다.



by 무위자연 2015. 2. 13. 10:49

0. MFC에서는 각 UI Component는 멤버변수를 추가해서 처리하는 것이 훨씬 간편하다

방법은 리소스 편집기에서 멤버변수 추가를 원하는 컴포넌트를 클릭후에 우클릭을 하면 메뉴가 나온다

이 메뉴에서 "Add Variable / 변수 추가하기"를 선택하면 마법사가 나온다.

마법사에서 멤버 변수명을 추가하고 "Finish/종료"를 선택하면 된다.


1. LISTBOX Tips

a. ListBox에 CString을 추가하기

AddString으로 넣을 경우에 UI 갱신 타이밍에 따라서 순서가 엉킬수가 있다.,

그러므로 Insert(인덱스, CString 객체)가 순서에 훨씬 명시적이다.


2. CEDIT Tips

b. CEDIT 컴포넌트에서의 Text 를 Get/Set하기

길이 - m_edit_fwversion.GetWindowTextLengthW()

Get - m_edit_fwversion.GetWindowTextW(m_fw_ver); // 선언한 CString 객체로 해당 값이 들어온다,

Set - m_admin_password.SetWindowTextW(_T("what you want")); //입력된 문자열이 바로 표시된다.

글자수 제한 - m_edit_sn_date.SetLimitText(3);

숫자만 입력 - 리소스 편집기에서 "Number" 라는 속성(property)를 true를 하면 숫자만 입력받게 할수 있다.

비밀번호 창으로 쓸 때 - "Password"라는 속성을 "true"로 해주면 입력 값이 "*"로 보이게 할 수 있다.


3. COMBOBOX Tips

a. 콤보박스에서 정해진 값만 보여주고 선택한 콤보아이템을 편집하지 못하게 할때

콤보박스 속성에 "Type" 중에 "Dropdownlist"를 선택할 경우에 정해진 아이템만 선택하고 편집이 불가능하게 할 수 있다.


b. 콥보박스에서 선택된 셀의 Text를 읽어오기.

GetLBText를 사용하면 해당 콤보박스의 아이템 텍스트를 바로 가져올 수 있고 형식은 CString이다.

ex. m_cb_sn_group1.GetLBText(m_cb_sn_group1.GetCurSel(),set_p_group1);




by 무위자연 2015. 2. 12. 12:09

MFC UI에서 입력 받은 여러개의 CString 으로 받은 다음에 하나의 char arry로 바꾸는 작업을 위해서 



방법 !

CString을 선언하고

strncpy로 복사하면 된다.


CString g_postSerialnum;

char temp_sn[12];

g_postSerialnum= _T("A0111010asdas");

strncpy(temp_sn, g_postSerialnum, 12);

만일 길이를 지정하지 않고 strcpy를 쓴다면?

strcpy(temp_sn, g_postSerialnum);

환경에 따라서 다르겠지만 MFC C++ / 2008에서는 함수 콜이 끝나면 죽는다

디버그에서는 안 죽고 릴리스에서만!!!

주의해서 써야 한다.


후썰...


이짓을 하게된 배경


<전임자코드>--------------------------------------------------------------

CString set_product_code1, set_product_code2, set_made_factory, set_made_date, set_made_year, set_product_num;


CString str;


//이 부분은 UI에서 얻어오는 부분이기때문에 일단 보류

m_sn_model_list.GetLBText(m_sn_model_list.GetCurSel(), set_product_code1);

m_sn_model_list1.GetLBText(m_sn_model_list1.GetCurSel(), set_product_code2);

m_mcnt_list.GetLBText(m_mcnt_list.GetCurSel(), set_made_factory);

GetDlgItemText(20012, set_made_date);

m_version_list.GetLBText(m_version_list.GetCurSel(), set_made_year);

GetDlgItemText(20017, set_product_num);


////////////////////////////////////////////////////////////////////////////////////////

//SN char 배열에 삽입


char model_code[2], factory_code[2], date[2], year[2], count1[2], count2[2];

CString set_made_date1, set_made_date2, set_made_date3;

CString set_product_num1, set_product_num2, set_product_num3, set_product_num4, set_product_num5;


//CString을 한자씩 짤라서 CString 한 글자씩으로 만든다.

//한글자씩 잘라서

set_made_date1 = set_made_date.Mid(0,1);

set_made_date2 = set_made_date.Mid(1,1);

set_made_date3 = set_made_date.Mid(2,1);

set_product_num1 = set_product_num.Mid(0,1);

set_product_num2 = set_product_num.Mid(1,1);

set_product_num3 = set_product_num.Mid(2,1);

set_product_num4 = set_product_num.Mid(3,1);

set_product_num5 = set_product_num.Mid(4,1);


//각 한자의 CString을 sctcpy로 복사한다.

strcpy(&model_code[0], (LPSTR)(LPCTSTR)set_product_code1);

strcpy(&model_code[1], (LPSTR)(LPCTSTR)set_product_code2);

strcpy(&factory_code[0], (LPSTR)(LPCTSTR)set_made_factory);

strcpy(&factory_code[1], (LPSTR)(LPCTSTR)set_made_date1);

strcpy(&date[0], (LPSTR)(LPCTSTR)set_made_date2);

strcpy(&date[1], (LPSTR)(LPCTSTR)set_made_date3);

strcpy(&year[0], (LPSTR)(LPCTSTR)set_made_year);//year의 경우에는 심지어 한자인데도 2개로 선언하고 처리함.

strcpy(&year[1], (LPSTR)(LPCTSTR)set_product_num1);

strcpy(&count1[0], (LPSTR)(LPCTSTR)set_product_num2);

strcpy(&count1[1], (LPSTR)(LPCTSTR)set_product_num3);

strcpy(&count2[0], (LPSTR)(LPCTSTR)set_product_num4);

strcpy(&count2[1], (LPSTR)(LPCTSTR)set_product_num5);


//한자씩 넣은 것을 또 char arry에 하나씩 넣는다.

//이때 변수명도 제각각 이라 순환문을 못 쓰고 다 따로 넣어줘야 해서 리팩토링이 절실하다.

send_packet[11] = model_code[0];

send_packet[12] = model_code[1];

send_packet[13] = factory_code[0];

send_packet[14] = factory_code[1];

send_packet[15] = date[0];

send_packet[16] = date[1];

send_packet[17] = year[0];

send_packet[18] = year[1];

send_packet[19] = count1[0];

send_packet[20] = count1[1];

send_packet[21] = count2[0];

send_packet[22] = count2[1];


<나의 코드>

//CString의 값을 하나로 붙인다.

g_postSerialnum = set_p_group1+ set_p_group2 + set_p_model1+set_p_model2 + set_made_date + set_made_year + set_product_num;

//한방에 복사 끝. 어차피 하나로 붙인 char 모음들을 묶어서 선언하고 복사한다.

//이때 반드시 strncpy를 쓴다.

strncpy(temp_sn, g_postSerialnum, 12);

//당연히 하나의 char array 이므로 순환문으로 넣는 것이 가능하다

for(int i = 11; i < 23; i++)

{

send_packet[i] = temp_sn[i - 11];

}




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

• Data is negligible even longer delay included in the event.


• Raise the event in a row without delay, even if you can handle in Flex.



• The time the Event is passed to the swc in the Dll is the time that one function ends.


• Data transfer test results.


      You can receive all the treatment in less than one second in Flex in 2893 when the char array length Raise an event that contains as much as 1000 times.


Test environment;

- OS: Windows 7 64 bits

- Flash Builder 4.6

- VisualStudio 2010 - C ++

(Korean)


by 무위자연 2015. 1. 22. 08:49

If you have to deal with the issue at the Event dispatch in Flex.




This is not a problem occurring in the dispatch occurs in the event handler.




When A event raises and  a B event handler to handle the case.


Example.


// Normal  case, Use right


main.addEventListener (CustomEventA.DataSend, csEventHandler, false, 0, true);


// Abnormal case, Use wrong


main.addEventListener (CustomEventB.DataSend, csEventHandler, false, 0, true);




private function csEventHandler (e: CustomEventA): void


{


// handle events


}




When the CustomEventA raises to normal operation.


If CustomEventB is the same as a event handler, errors occurs. It is difficult to find this error because error message show at the dispatch event CustomEvent B


"TypeError: Error # 1034: Type Coercion failed: can not convert CustomEventB @ 64e6ca1 to CustomEventB will aereo is to be opened in this way.


If you make a new event handler for CustomEvent B, it can be solved


(Korean)

by 무위자연 2015. 1. 22. 08:48

091103 3권

091108 4권


에드몽 웰즈가 개미를 관찰하듯

미카엘팽송 신후보생이 18호 지구별을 관찰하게 된다


실제로 개미느낌이 강하게 든다.


지난날의 기억-개미, 타노토노트, 천사들의 제국-도 살아나며

신의 문법에 익숙해져서 한결 재미나게 읽엇다


하나의 대전제를 가지고 꾸준히 탐구하는 베르나르의 열정에 감탄하게 된다

수년간 개미를 썼고 그때의 의구심?탐구심으로 신까지 오게 되었다는 것은 참으로 대단한 일이다.


그리고 인간 본연의 핵심문제를 탐구하다 보면 결국 자기 자신과 만난다는 것은

동서양이 없는 듯하다


내가 좋아하는 이영도씨의 드래곤 라자도 궁극적으로는 자신에 대한 반성이 모토였고 실제 주인공은 자신과 맞닥뜨릴때 가장 어려운 싸움을 했으며

신의 미카엘도 자신을 가장 나쁜 적으로서 만나게 된다


마지막의 8 제우스로 끝나지 않고 9가 있음은 반전이다.


마지막 3분가 기대된다

by 무위자연 2015. 1. 9. 22:35

박노자씨의 장점은 비판적 지성을 일깨워준다는 것.

모든 의견이 맞다는 것도 아니고 옳은 말을 하는 건 아니다. 옳다는 표현자체도 어페가 있지만.


이 책은 박노자씨가 운영하는 블로그의 글을 모아놓은 것이다.


어려운 얘기도 모르는 얘기도 있고. 공감이 가는 부분도 많고.


공감하기 어려운 문제도 있고.


예를 들어 아프카니스탄에 잡혀간 전도사 일행을 석방시키려는 정부의 노력에 대해서.

생명을 경시하고 국민을 덜 사랑하면 안된다는 식으로 얘기하는데.

물론 맞는 말이긴 하나 내가 생각할때 그때의 논쟁의 쟁점 왜 위험지역에 정부의 권고를 무시하고 갔느냐였던 것같다.

당연히 그런 권고를 무시하고 갔으니 잘 죽어라는 식의 매도는 아니지만^^


그리고 말미에 다카하시라는 일본사람이 유학의 주기론/주리론이란 용어를 만들었다는 말이 의미심장하다.

그럼 우리는 뭐를 뭐로 알고 돈에 넣을 정도로 이이를 높이 친건지. 한번 찾아봐야 겠다는 생각이 들었다.

by 무위자연 2015. 1. 9. 22:34