Qt 디자이너 해킹의 일환으로 런타임 (특히 :/trolltech/widgetbox/widgetbox.xml
)에서 리소스를 제거하는 데 관심이 있습니다. 컨텍스트에 대한 자세한 내용은 게시물의 끝 부분을 참조하십시오.런타임에 정적 Qt 리소스 제거/수정
내 분명한 (실패) 시도했다 :
QFile(":/trolltech/widgetbox/widgetbox.xml").remove();
하지만 오류를 반환했습니다.
내 다음 시도는 Q_CLEANUP_RESOURCE(widgetbox)
을 사용했지만 확장 된 기능은 Qt 디자이너 (QDesignerComponents)의 개인 구성 요소에서만 사용할 수 있습니다.
또 다른 시도
는 파일의 내용을 취소했지만, 읽기 전용 :QFile f(":/trolltech/widgetbox/widgetbox.xml");
if (f.open(QFile::WriteOnly)) { ... } // returns false
나는 또한 내 자신의 :/trolltech/widgetbox/widgetbox.xml
을 정의하여 Qt는 자원의 파일 시스템에 덮어 쓰기를 시도했습니다. 파일을 열 수는 있지만 데이터를 검색하지 못합니다. 중복 된 리소스 (사용되지 않는 이름의 리소스를 별칭으로 지정하면 응용 프로그램이 내용을 올바르게 인쇄 할 수 있기 때문입니다). 반면 위젯 목록은 올바르게 표시됩니다.
QFile f(":/trolltech/widgetbox/widgetbox.xml");
if (f.open(QFile::ReadOnly)) {
qDebug() << "{";
qDebug() << f.readAll(); // shows nothing
qDebug() << "}";
}
런타임에 리소스 파일을 수정/제거/바꿀 수있는 방법이 있습니까? 경우
당신이 XY problem 내가 전체 맥락을 설명 할 것이다 고려 : 나는 독립 한 작은 비틀기를 만들어 내 자신의 IDE에 Qt는 디자이너를 통합하고있다. 기본적으로 실행 파일 대신 동적 라이브러리를 생성하는 컴파일 플래그를 추가하고 기본 창을 표시하는 옵션을 추가했습니다.
이 IDE에서는 사용자가 기본 위젯을 사용하고 목록을 사용자 정의 위젯 세트로 제한하지 못하게하는 옵션을 추가하려고합니다. 내가 언급 한 리소스는 기본적으로 Qt Designer에서 사용할 수있는 위젯 목록이 들어있는 파일입니다. 추가 위젯은 플러그인을 통해 쉽게 포함될 수 있지만 기본 위젯을 제거하는 방법을 찾지 못했습니다.
하나의 옵션은로드를 선택적으로 만드는 것이지만 많은 프로젝트를 통해 변경 사항이 연속적으로 생성됩니다. 나는 Qt 디자이너를 너무 많이 수정하는 것을 피하고 싶다.
감사합니다. @ kuba-ober! 파일 엔진과'registerResource'를 살펴 보겠습니다. 시험 할 시간이 걸릴 것입니다. 그러나 알려 드리겠습니다! – cbuchart
BTW, 수정에 관해서는 클라이언트가 Qt_의 향후 버전으로 마이그레이션 할 수 있기를 원하므로 가능한 한 빨리 Qt의 최신 버전을 따라 잡기 위해 수행되는 작업량을 줄이고 싶습니다. . – cbuchart
Qt 기본 저장소의 디자이너 폴더를 추적하는 전용 git 소스 저장소를 설정할 수 있습니다. [스파 스 체크 아웃] (https://stackoverflow.com/questions/4114887/is-it-possible-to-do-a-sparse-checkout-without-checking-out-the-whole-repository)을 사용하고 얕은 필요한 코드 만 가져 오십시오. 그런 다음 변경 사항을 저장소에 추가하십시오. 새로운 Qt 버전으로 업그레이드 할 때 지점을 리베이스하십시오. 약간의 충돌이있을 수 있지만, Qt 코드와 코드 변경이 중복되는 부분에만 적용됩니다. 해당 프로젝트를 프로젝트의 git repo에 하위 모듈로 추가 할 수 있습니다. 아니 자식 = SOL. –