2017-02-07 6 views
0

저는 C++과 Qt를 배우고 있으며, 너무 많은 연결을 만들지 않고도 여러 요소간에 값을 전달하는 가장 좋은 방법은 무엇인지 궁금합니다.커스텀 QtWidget에 값을 전달하는 가장 좋은 방법

지금은 SamplerModule입니다. QPushButton은 (ChordSelector) 많은 맞춤을 넣었습니다.

connect(ui->btn_accords_X, SIGNAL(clicked()), ui->btn_accords_X, SLOT(changeChor())); 

X01에서 12에 : 이 위젯에서 내가 가진 각각의 버튼에 대한 하나의 연결을했습니다.

지금 버튼을 클릭하면 버튼의 색상이 변경됩니다. 그러나 나는 또한 내 SamplerModule 클래스에서 사용할 수있는 값으로 텍스트를 설정하려고합니다. 그리고이 버튼을 클릭 할 때마다 증가 된 값을 반환하고 싶습니다. 그래서 3 개 연결을이을에 대해 생각했습니다

:

  1. click()(ChordSelector)->change()(ChordSelector) 버튼의 색상을 변경하고 제 값을 증가하기는 int로 마녀는 내 코드를 지정합니다.
  2. newChord(int) (ChordSelector) -> updateChord(int) (SamplerModule)
  3. 는 코드가

그래서 이런 식으로 작동합니다

  • changeText(QString) (SamplerModule) -> setText(QString) (ChordSelector)
  • 을 변경되었음을 내 위젯을 통지합니다,하지만 난 12 개 버튼을 가지고, 난 그냥이 작은 트릭을 할 36 개 연결을해야합니다. 혹시 조언을 해 주시겠습니까? 당신이 QtDesigner를 사용하는 경우

    답변

    1
    1. QPushButtonon_yourButtonName_clicked()라는 이름의 기본 슬롯을해야합니다. 자동으로 QPushButtonclick() 신호에 연결됩니다. 이것은 첫 번째 연결을 저장할 수 있습니다.

    2. ChordSelectorSamplerModule에 대한 포인터를 잡고, 또는 SamplerModule의 글로벌 싱글 인스턴스가, 그래서 ChordSelector에 쉽게 액세스 할 수 있습니다. 이런 식으로 updateChord(int)을 호출하기 위해 신호/슬롯을 사용할 필요가 없으며, 간단한 함수 호출로 트릭을 수행 할 수 있습니다. 그러면 두 번째 연결이 저장됩니다.

    3. 그리고 당신은 오히려 SampleModule보다, click()ChordSelector의 슬롯에 setText(QString)를 호출 할 수 있습니다. 그러면 세 번째 연결이 저장됩니다.

    +0

    고마워요, 먼저, 왜 on_yourButtonName_clicked()가 연결을 저장하는지 이해할 수 없습니다. click() 슬롯을 on_yourButtonName_clicked()로 대체하면됩니까? 그렇다면 C++의 초심자인데 제 질문의 일부입니다. ChordSelector에서 'SamplerModule'의 데이터에 액세스하려고하므로 'extern' 변수가있는 다른 헤더를 사용하는 것이 해결책이 될 수 있지만 그것을하는 것이 옳은 방법으로 보이지 않습니다. 'ChordSelector'에'SamplerModule'을 포함 할 수 없으므로 어떻게해야할지 모릅니다. 이 클래스에서 "포인터를 잡는"올바른 방법은 무엇입니까? 감사합니다. –

    +1

    1. on_yourButtonName_clicked()를 자동 연결 슬롯으로 간주 할 수 있습니다. 따라서 수동으로 연결할 필요가 없습니다. 2. 'ChordSelector'가 싱글 톤 인스턴스 (전 세계적으로 단 하나의 인스턴스)일까요? 그렇다면 싱글 톤 클래스로 구현할 수 있습니다.싱글 톤 클래스에 대한 자세한 내용은 [이 위키] (https://en.wikipedia.org/wiki/Singleton_pattern)를 참조하십시오. –

    +0

    감사! 나는 그것을 구현하려고 할 것입니다! –

    관련 문제