2009-10-18 3 views
1

내 주요 응용 프로그램 개체는 , QDialog, QWindow 및 기타 몇 가지 구성 요소를 저글링으로 사용하는 QObject입니다. 응용 프로그램은 주로 옵션 대화 상자 등으로 트레이에 앉습니다.QObject의 자식으로 QWidget을 가질 수 있습니까?

이제는 QMetaObject::connectSlotsByName()을 사용하여 이러한 개체의 신호를 주 개체의 슬롯에 연결하고 싶습니다. 그것들 중 10 ~ 15 개이므로 수동으로 작성하는 것이 효율적이지 않은 것 같습니다. 전문가, 현대인 등

QWidget 기반 개체에 대한 부모로 사용할 수 없으며 주 개체가 보이지 않기 때문에 개체가 표시되지 않으므로 QWidget을 상속하도록 변경합니다.

아이디어가 있으십니까?

+0

관련 질문 (중복이 아닌) : 간단히 말해서 http://stackoverflow.com/q/28992276/1329652 –

답변

1

슬롯에 수동으로 신호를 연결하는 것은 완벽합니다. Qt는 그 일을하고 있으며, 대부분의 Qt 애플리케이션이이를 수행하고 있습니다.

난 당신이 QWidget과 부모 - 자식 문제에 대한 connectSlotsByName을 사용할 수 없습니다 두려워 해요,하지만 당신이 정말로 원하는 경우에 connectSlotsByName처럼 작동하는 함수를 작성할 수 있도록, 당신은 QMetaObject에서 사용할 수있는 모든 메타 데이터가 모든 쌍/세트 QObject s.

+0

나도 약간의 슬롯을 연결, 단지의 10 ~ 20와 함께 할 귀찮게 것 그들. :) 내 자신의 함수를 작성하는 것은 좋은 계획처럼 들리지만. 감사! – Macke

2

QObject을 숨기기 QWidget으로 승격시킬 수 있습니다 (this answer 참조).

#include <QtWidgets> 

int main(int argc, char ** argv) { 
    QApplication app{argc, argv}; 
    QWidget parent; 
    QLabel l1{"Close me to quit!"}, l2{"Hello!"}; 
    for (auto label : {&l1, &l2}) { 
     label->setMinimumSize(200, 100); 
     label->setParent(&parent); 
     label->setWindowFlags(Qt::Window); 
     label->setText(QString("%1 Parent: %2."). 
        arg(label->text()).arg((quintptr)label->parent(), 0, 16)); 
     label->show(); 
    } 
    l2.setAttribute(Qt::WA_QuitOnClose, false); 
    return app.exec(); 
} 
관련 문제