http://wiki.bigfug.com/view/Cross_Compile_Fugio_To_Raspberry_Pi   <<- 이글을 쓰신 분 께 감사를.


주의 사항 


1. 계정명과 비밀번호를 숙지한다

2. root권한으로 로그인하면 안됀다. 일반사용자로 로그인해서 sudo를 이용해 작업하자

3. 순서를 지킨다.

4. 해당가이드에서는 base버전만 설치하기때문에 doc-html이 지원이 안된다. 적절하게 git 주소를 수정해서 자기가쓰려는 qt버전을 설치한다

5. 대략 순서로따지면 


라즈베리파이 라이브러리를 네트워크를 통하여 크로스 컴파일할 곳으로 복사 -> 해당컴퓨터에서 라이즈베리 라이브러리를 이용해 컴파일 -> Device세팅 을 통하여 라즈베리파이 원격 조작 및 개발



6. QtCreator 3.5.x버전은 버그가있어 Device탭을쓸수없다. 4.x.x 버전이상을 설치해서 쓰자  





#include <vector>




void main()

{

std::vector<int> sortVector; // 값은 pushback으로 아무값이나 채워넣자 

std::sort(sortVector.begin(), sortVector.end()); //끗

}





/////////// 구조체도 sort함수를 사용할 수 있다! /////////




struct test

{

   int x;

   int y;

};



//만약 클래스를 사용한다면 Static클래스로 만들어야한다.

bool sort(const test& first, const test& second)

{

    return first.x < second.x; // 비교하고싶은 값 반드시 Lvalue < Rvalue형태가 되어야함.

}



void main()

{

    std::vector<test> sortStruct; //역시 값은 아무값이나 pushback으로

    std::sort(sortStruct.begin(), sortStruct.end(), &sort); //클래스안의 멤버 함수를 사용한다면 public접근설정하고 스코프를 앞에 기재

}



'C++' 카테고리의 다른 글

Open MP(병렬처리 연산) 간단 사용법  (0) 2017.12.13
c++11용 형변환 유틸리티클래스  (0) 2017.11.21
Qt 스타일 변수관리법  (0) 2017.11.20
선형대수학자료  (0) 2017.08.07
윈도우와 리눅스에서 MacAddress가져오기  (0) 2017.06.01

//분야가 분야인지라 영상처리를 공부하면서 업무보는데 기억에 잊혀지지 않게 기록을남긴다.



bool processing::image(cv::Mat& pImage, int nImageFlip, double dAngle)

{

#ifndef __cplusplus

        IplImage* pImage; //original image read

IplImage* pImgGrab;

#else

cv::Mat imgGrab;

#endif



#ifndef __cplusplus


std::string strImageFileName = _T("C:\\TEST2.bmp");

pImgGrab = cvLoadImage(strImageFileName, CV_LOAD_IMAGE_COLOR);


if (nImageFlip == 1)

cvFlip(pImgGrab, NULL, 1); // Y축을 중심으로 반전 (좌우 반전)


cvCopy(pImgGrab, pImage);

cvReleaseImage(&pImgGrab);


#else


string strImageFileName = "F:\\TEST2.bmp";

imgGrab = cv::imread(strImageFileName);


if (nImageFlip == 1)

cv::flip(imgGrab, pImage, 1);


#endif

}


'영상처리(C++)' 카테고리의 다른 글

OpenCV 고주파 필터 저주파필터  (0) 2017.12.21



웅.. 문서들보면 가끔 private struct붙은애들이있는데... 대충 이런패턴으로쓰는듯하다

스마트 포인터를 이용한 private 변수관리법인데




//.h


#include <QScopedPointer>


class test 

{

 private:

   struct privateStruct; //전방선언


private:

 QScopedPointer<privateStruct> d;


};




//.cpp


...



struct test::privateStruct

{

QString 쏼라쏼라;

QString 나는멤버변수;

};



test::test() :

   d(new privateStruct)

{

}


요런식으로..



이런방식을 쓸때 가장 장점은 불필요한 Include를 헤더에 하지않아도된다.

정의가 필요한녀석들은 cpp에 몰아넣을수있기때문..



난 C++개발자다..  주로 했던분야는 무선통신(LTE, IoT관련 기술(LoRa, BLE))근데 쌩뚱맞게


의료기기쪽에서 잡오퍼가와서 검토해보고 이직했따.. 뭐 여기서도 요새 대새가 IoT인지라 저전력기술에대한 지식이 도움이될듯하다.


근데.. 기존 코드를 유지보수하는데 .. 

일부 코드중에 

멤버변수도아닌 지역변수의 Prefix에 m을 집어넣어둔다던가


private가아닌 public에 들어가있는 클래스들을 볼때 진짜 현기증난다..


제발 멤버변수는 private에 만 선언하고 지역변수에 m좀쓰지말자 제발 ㅠㅠ

오늘도 이렇게 코드를 고치고있다..

'잡담' 카테고리의 다른 글

그냥 요즘 드는 생각  (1) 2020.02.19
라즈베리 파이 장비개발중  (1) 2018.06.22
군단의 심장 케리건 엔딩(승천) OST  (0) 2016.12.17
테스트(...)?  (0) 2016.12.15
QSound ㅡㅡ  (0) 2016.12.15

https://zapary.blogspot.kr/2015/05/1504-fcitx-hangul.html



apt-cache search qt5 fcitx 치면 관련 라이브러리설치가능







----------2018-06-28 - update ---------------

-QtCreator에서 쓸수있는법

http://baealex.tistory.com/139


해당링크참조



출처:http://blog.daum.net/eigenvalue/10856412

      :http://darkpgmr.tistory.com/103

선형대수의기초.hwp


//mac address dependency

#ifdef _WIN32

#include <WinSock.h>

#include <IPHlpApi.h>

#pragma comment(lib, "iphlpapi.lib" )

#else 

#include <sys/ioctl.h>

#include <net/if.h> 

#include <unistd.h>

#include <netinet/in.h>

#include <string.h>

#endif


#ifdef _WIN32

string CMacAddressHelper::getMacAddress()

{

char strMac[256] = { 0, };

DWORD size = (DWORD)sizeof(PIP_ADAPTER_INFO);


PIP_ADAPTER_INFO Info;

ZeroMemory(&Info, size);

int result = GetAdaptersInfo(Info, (PULONG)&size);    


if (result == ERROR_BUFFER_OVERFLOW)  

{

Info = (PIP_ADAPTER_INFO)malloc(size);

GetAdaptersInfo(Info, (PULONG)&size);

}

if (!Info)        

return string();


sprintf_s(strMac, "%0.2X-%0.2X-%0.2X-%0.2X-%0.2X-%0.2X",

Info->Address[0], Info->Address[1], Info->Address[2], Info->Address[3], Info->Address[4], Info->Address[5]);



return string(strMac);

}


#else //linux version

string CMacAddressHelper::getMacAddress()

{

struct ifreq ifr;

struct ifconf ifc;

char buf[1024] = { 0, };

int success = 0;


int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

if (sock == -1) { /* handle error*/ };


ifc.ifc_len = sizeof(buf);

ifc.ifc_buf = buf;

if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { /* handle error */ }


struct ifreq* it = ifc.ifc_req;

const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));


for (; it != end; ++it) {

strcpy(ifr.ifr_name, it->ifr_name);

if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {

if (!(ifr.ifr_flags & IFF_LOOPBACK)) { // don't count loopback

if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {

success = 1;

break;

}

}

}

else { /* handle error */ }

}


//        char mac_address[6] = { 0, };

char strMac[256] = { 0, };

if (success)

//memcpy(mac_address, ifr.ifr_hwaddr.sa_data, 6);

sprintf(strMac, "%0.2X-%0.2X-%0.2X-%0.2X-%0.2X-%0.2X",

ifr.ifr_hwaddr.sa_data[0], ifr.ifr_hwaddr.sa_data[1], ifr.ifr_hwaddr.sa_data[2], ifr.ifr_hwaddr.sa_data[3], ifr.ifr_hwaddr.sa_data[4], ifr.ifr_hwaddr.sa_data[5]);


return string(strMac);

}

#endif

도움은 std::string님께서 해주셨습니다.

std::string str;

unsigned char buffer[4] = {0,};


for(int i = 0 ; i < size ; i++)

str.append(sprintf(buffer,"%02x", (int)(unsigned char)data.at(i)));

str.append(sprintf(buffer,"%02x", (unsigned char)data.at(i)));


주의사항


1. (unsigned char)로 형변환하는이유는 Hexa데이터의경우 0xFF까지쓰는 경우가많은데 그냥 signed char를 쓰면 정상적인 값이 안나올수있다. 

2. (int)로 2차형변환하는이유는 그냥 저상태에서 02x로 써버리면 숫자가아닌 문자로 인식된다. 따라서 어마어마한 삽질을 하게될가능성이높다.



#pragma once

//.h

#include <QDialog>
class AboutDlg : public QDialog
{
private :
    Q_OBJECT
    Q_DISABLE_COPY(AboutDlg)
    struct privateData;

public:
    explicit AboutDlg(QWidget *parent = 0);
    virtual ~AboutDlg();

    void initWindowPosition(QWidget* parent);

private :
    void initSlgnalSlotConnection();

private:
    QScopedPointer<privateData> d;
};

//.cpp
struct AboutDlg::privateData{
    QScopedPointer<Ui_AboutDlg> ui;
};
// note, this class is information page (about)
AboutDlg::AboutDlg(QWidget *parent) :
    QDialog(parent),

    d(new privateData)


+ Recent posts