2017-11-01 6 views
0

내 프로젝트의 스타일 플러그인을 만들려고했는데 플러그인이로드 된 것처럼 보이지만 QStyleFactory :: keys()가 내 키를 반환하지 않은 이유는 무엇입니까? 1 QT_DEBUG_PLUGINS을 설정하여 , 나는 다음있어 메시지 :Qt 스타일 플러그인이로드되었지만 키가 누락되었습니다.

QApplication app(argc, argv); 
QApplication::setStyle(QStyleFactory::create("mystyle")); 
qDebug() << QStyleFactory::keys(); 

마지막 qDebug 문 인쇄 : 내 주()에서

Found metadata in lib .../styles/libstyles.so, metadata= 
{ 
    "IID": "this.is.my.style", 
    "MetaData": { 
     "Keys": [ 
      "mystyle" 
     ] 
    }, 
    "className": "MyStylePlugin", 
    "debug": true, 
    "version": 329986 
} 

Got keys from plugin meta data() 
("Windows", "Fusion") <= Shouldn't "mystyle" also show up here? 

답변

1

되었기 때문에 IID해야 ""org.qt-project.Qt.QStyleFactoryInterface"이 아니라 "this.is.my.style"입니다. IID를 변경하면 플러그인이 Qt에서 스타일 플러그인으로 인식하지 못합니다. 여기

는 키가 감지 Qt는 코드의 추출물 : 당신은 두번째 줄에 그것을 볼 수 있습니다

QString iid = library->metaData.value(QLatin1String("IID")).toString(); 
if (iid == QLatin1String(d->iid.constData(), d->iid.size())) { 
    QJsonObject object = library->metaData.value(QLatin1String("MetaData")).toObject(); 
    metaDataOk = true; 
    QJsonArray k = object.value(QLatin1String("Keys")).toArray(); 
    for (int i = 0; i < k.size(); ++i) 
     keys += d->cs ? k.at(i).toString() : k.at(i).toString().toLower(); 
} 
if (qt_debug_component()) 
    qDebug() << "Got keys from plugin meta data" << keys; 

경우 IID는 예상 IID (d->iid)와 일치하지 않는 플러그인에서 코드 MetaData을 읽으 려하지 않아도됩니다.

+0

감사합니다. Benjamin! IID를 수정 한 후 제대로 작동합니다. 나는 IID가 무엇이든 될 수 있다고 생각했지만, 플러그인 로더가 그것을로드할지 여부를 결정하는 데 사용할 것이라고는 몰랐다. 죄송합니다. 평판이 너무 낮기 때문에 점수를 올릴 수 없습니다. –