방금 Qt로 작업하기 시작했습니다. 전체 신호 슬롯 시스템으로는 상당히 분실했습니다.
일반적인 개념을 이해하지만 GUI 코드를 디자인하는 올바른 방법이 무엇인지 이해할 수 없습니다. 서로 포인터를 가지고있는 클래스의 계층 구조라고 생각합니까? 예를 들어 주 창이있는 경우 W1
버튼을 사용하여 B1
버튼을 눌러 다른 창을 열어야합니다 (W2
).
W1
의 클래스 B1
에 대한 포인터를 보유해야하지만, 내가 W2
에 포인터를 유지해야 할 것 같다 '이유는 매우 분명하다 W2
의 일부 사용자 지정 슬롯에 B1
의 clicked()
신호를 연결하기위한 단자, S 클래스를 위해, 그리고 이유를 모르겠다 ... 시그널 - 슬롯 메커니즘이 일반적이고 특정 인스턴스가 아닌 설계가 아닌가? 이 예제의 코드를 디자인하는 올바른 방법은 무엇입니까?Qt로 GUI를 디자인하는 올바른 방법
답변
연결은 항상 클래스의 인스턴스간에 만들어집니다. 신호 및 슬롯은 클래스 B의 한 인스턴스에 클래스 A의 인스턴스에 변경 또는 이벤트가 있음을 알리는 메커니즘입니다.
아래는 버튼 B1이 클릭 될 때 창 W2를 표시하는 클래스 W1의 디자인입니다. 클래스 W1의 초기화를 건너 뛰고, 윈도우의 UI를 생성하는 방법이 거의 없기 때문에 B1 버튼을 얻습니다. 연결이 성공했는지 확인해 보았습니다. 안전을 위해서였습니다. 여기
class W1 :public QWidget
{
public:
A(QWidget *parent = 0):QWidget(parent)
{
//init
B1 = getB1();
if(!connect(B1,SIGNAL(clicked()),this,SLOT(show_W2())))
qFatal("%s %i connection failed B1->clicked this->show_W2",__FILE__,__LINE__);
}
public slots:
void show_W2()
{
QWidget *W2 = new Window2(this->parent());
//create window
}
protected:
QPushButton *B1;
}
클래스 W1은 클래스 W2에 대해 지금은 아무것도하지 마십시오 예를 들어, 서로 다른 접근 방식 :
나는 짓을 정확히하지만 어떻게이 위젯 사이에 연결을 만들려면 어떻게해야합니까
class W1 :public QWidget
{
public:
A(QWidget *parent = 0):QWidget(parent)
{
//init
B1 = getB1();
if(!connect(B1,SIGNAL(clicked()),this,SIGNAL(B1_clicked())))
qFatal("%s %i connection failed B1->clicked this->B1_clicked",__FILE__,__LINE__);
}
signals:
B1_clicked()
}
void MainWindow::creatW1()
{
W1 *_w1 = new W1;
if(!connect(_w1,SIGNAL(B1_clicked()),this,SLOT(createW2())))
qFatal("%s %i connection failed _w1->B1_clicked this->show_W2",__FILE__,__LINE__);
}
이 예제 코드를 디자인하는 올바른 방법은 무엇입니까?
Qt 디자이너로 간단한 UI를 만들고 생성 된 내용을 살펴보십시오. Qt로 시작할 때 그 점이 도움이되었습니다.
/수업? 신호 슬롯 편집기는 다른 클래스 슬롯을 인식하지 못합니다 ... –
코드에서 수동으로 연결하십시오. QObject :: connect()를 참조하십시오. – arrowd
- 1. Nucllues Grafix GUI를 QT로 이식
- 2. N 레이어를 디자인하는 올바른 방법입니까?
- 3. Qt로 직렬화
- 4. GUI를 만드는 올바른 방법은 무엇입니까
- 5. cocos2d를 Qt로 이식하는 방법
- 6. QT로 테마를 만드는 방법
- 7. 테스트 사례를 디자인하는 방법
- 8. 데이터 로딩 및 객체 생성을 디자인하는 올바른 방법
- 9. 쇼핑 카트 Android 애플리케이션을 디자인하는 올바른 방법입니까?
- 10. PyGame으로 모험 게임을 디자인하는 올바른 방법은 무엇입니까?
- 11. 안드로이드 응용 프로그램을위한 좋은 GUI를 디자인하는 방법은 무엇입니까?
- 12. Qt로 바둑판 식으로 그릴 방법
- 13. 캘린더 컨트롤을 디자인하는 방법
- 14. 추천 페이지를 디자인하는 방법
- 15. html 시간표를 디자인하는 방법
- 16. 스타 스키마를 디자인하는 방법
- 17. 사용자 정의보기를 디자인하는 방법
- 18. 내 클래스를 디자인하는 방법
- 19. 스케줄러 클래스를 디자인하는 방법
- 20. 개체를 디자인하는 방법?
- 21. android이 레이아웃을 디자인하는 방법
- 22. QT로 시작하는 방법은 무엇입니까?
- 23. VS2010 : GUI를 보는 방법
- 24. 수신기에서 gui를 제어하는 방법
- 25. GUI를
- 26. Qt로 안전한 파일 업로드
- 27. WPF 바인딩을 사용하여이를 디자인하는 방법
- 28. EAV 테이블을 다시 디자인하는 방법
- 29. 선형 GUI 프로그램을 디자인하는 방법
- 30. 인덱싱 된 테이블을 디자인하는 방법?
위젯 클래스를 올바르게 초기화하는 방법은 어디에서 찾을 수 있습니까? – Sugar
Ui 초기화를 의미합니까? Qt Creator를 설치 한 경우 "Create form"옵션으로 Qt GUI 프로젝트를 생성하고 생성 된 코드를 확인하십시오. 이것은 대부분의 경우에 권장되는 초기화 방법입니다. – firescreamer
대부분의 경우 UI 초기화는 수동입니다. Qt의 예제와 튜토리얼에서도 그렇습니다. 그것은 약간 충격적입니다. 생성 된 코드가 도움이되었습니다. – Sugar