2010-02-16 4 views
2

대신 win32 api 그래프 라이브러리를 변환하여 qt 라이브러리를 사용합니다. 필자는 XP에서 성공적으로 컴파일 할 수 있었으며 이제 새롭고 향상된 그래프 라이브러리의 진정한 크로스 플랫폼 기능을 테스트하기 위해 우분투 (9.10)에서 빌드하려고 시도하고 있습니다.QBitmap의 QPixmap

몇 가지 컴파일 타임 오류가 발생했습니다. 클래스 중 일부는 Windows에만 한정되어 있으므로 코드를 다시 수정해야합니다.

//original code (compiled succesfully under Windows) 
unsigned short fill[4]; 
fill[0] = (unsigned short)(pattern & 0xF000) >> 8; 
fill[1] = (unsigned short)(pattern & 0x0F00) >> 4; 
fill[2] = (unsigned short)(pattern & 0x00F0); 
fill[3] = (unsigned short)(pattern & 0x000F) >> 4; 

HBITMAP hbmp = CreateBitmap(4, 4, 1, 1, fill); 
QPixmap texture; 
texture.fromWinHBITMAP(hbmp); 
DeleteObject(hbmp); 
brush1.setTexture(texture); 


//Code to compile on Ubuntu 
unsigned short fill[4]; 
fill[0] = (unsigned short)(pattern & 0xF000) >> 8; 
fill[1] = (unsigned short)(pattern & 0x0F00) >> 4; 
fill[2] = (unsigned short)(pattern & 0x00F0); 
fill[3] = (unsigned short)(pattern & 0x000F) >> 4; 

QBitmap bmp(4, 4, fill); //Is this correct ? 
QPixmap texture; 
texture.fromWinHBITMAP(bmp); // How to convert QBitmap to QPixmap ? 
//DeleteObject(hbmp);   // No longer required (local object scope) 
brush1.setTexture(texture); 

답변

1

QBitmap는이 클래스를 상속하는 QPixmap입니다 :

나는 다음과 같다 코드 섹션이있다.

2

QBitmap은 픽셀 이미지 당 1 비트이며 QPixMap에서 파생됩니다. 즉, 직접 brush1에 전달할 수 있습니다. 필요가 그것으로 더 아무것도 할 수 없습니다 (다른 제대로 채우기보다) 예 :

QBitmap bmp = QBitmap::FromData(QSize(4, 4), fill); 
brush1.setTexture(bmp); 

이 다른 플랫폼 아래로 Windows에서 단지뿐만 아니라 작동합니다 ...

편집 : 것을주의 그것의 가치를 위의 두 경우 모두 4 개의 반바지를 맺을 필요가 없습니다. 1 단락은 16 비트입니다. 4 x 4 1 비트 픽셀은 16 비트이므로 어쨌든 첫 번째 단락 만 읽습니다. ...

관련 문제