텍스트 편집기를 만들고 있는데 QMenu
에 QComboBox
을 넣고 싶습니다. 그런 일을 처리 한 QMenu
내부의 메소드를 찾지 못했습니다. 가장 가까운 것은 QMenu::addAction()
입니다. 나는이 장애물을 피하려고 생각하고 있었다.QtCreator의 QMenu에 QWidget을 추가하는 방법이 있습니까
감사합니다.
텍스트 편집기를 만들고 있는데 QMenu
에 QComboBox
을 넣고 싶습니다. 그런 일을 처리 한 QMenu
내부의 메소드를 찾지 못했습니다. 가장 가까운 것은 QMenu::addAction()
입니다. 나는이 장애물을 피하려고 생각하고 있었다.QtCreator의 QMenu에 QWidget을 추가하는 방법이 있습니까
감사합니다.
QWidgetAction
을 서브 클래스화한 다음 addAction
을 메뉴로 호출하면됩니다. 라벨
class SpinBoxAction : public QWidgetAction {
public:
SpinBoxAction (const QString& title) :
QWidgetAction (NULL) {
QWidget* pWidget = new QWidget (NULL);
QHBoxLayout* pLayout = new QHBoxLayout();
QLabel pLabel = new QLabel (title);
pLayout->addWidget (pLabel);
pSpinBox = new QSpinBox(NULL);
pLayout->addWidget (pSpinBox);
pWidget->setLayout (pLayout);
setDefaultWidget(pWidget);
}
QSpinBox * spinBox() {
return pSpinBox;
}
private:
QSpinBox * pSpinBox;
};
와 스핀 박스 행동
예제 코드는 이제 단순히 그것을 만들고
SpinBoxAction * spinBoxAction = new SpinBoxAction(tr("Action Title"));
// make a connection
connect(spinBoxAction ->spinBox(), SIGNAL(valueChanged(int)),
this, SLOT(spinboxValueChanged(int)));
// add it to your menu
menu->addAction(spinBoxAction);
언제든지 QWidget
또는 QFrame
을 메뉴 위젯으로 사용하고 QHBoxLayout
을 넣고 안에 QWidgets
을 넣을 수 있습니다.
이 아이디어는 실제로 나에게 발생했습니다. 나는 다소 Qt를 처음 사용했기 때문에 조금이라도 용서해 준다. QWidget을 어떻게 메뉴 위젯으로 설정할 수 있을까? –
QWidgetAction
이 QWidget
포함하는 QAction
당신의 메뉴에 추가합니다. 이것을 사용하여 QComboBox
을 캡슐화하고 QMenu::addAction
을 통해 메뉴에 추가 할 수 있습니다.
QWidgetAction의 서브 클래 싱을 선호하는 이유는 무엇입니까? 'pWidget'과는 별도로 QWidgetAction을 인스턴스화하고'setDefaultWidget'을 호출하기 위해 느슨한 결합과 유지 보수가 용이 한 코드를 제공하지 않을까요? 'createWidget'을 구현하는 유일한 이유는 하위 클래스가 아니겠습니까? –
다릅니다. 재사용 가능한 위젯 작업을 만들고 코드 작성을 위해 동일한 코드 부분을 다시 작성하지 않으려면 서브 클래스를 만들어야합니다. 예를 들어 레이블이있는 스핀 상자가 여러 개인 QMenu가 필요했고 최소/최대 값과 접두사가 다양했습니다. 'QWidgetAction'을 서브 클래스 화함으로써 재사용 가능한 요소를 가질 수 있었고 모든 경우에 생성자 인수 만 변경해야했습니다. 또한 액션 위젯을 갖춘 작은 라이브러리를 만들고 필요시 필요할 때 호출 할 수 있습니다. – pnezis
나는 이런 종류의 생성자에 익숙하지 않다 :'SpinBoxAction (const QString & title) : QWidgetAction (NULL) {}' –