2014-07-17 2 views
0

응용 프로그램을 UI에 위젯을 추가QT 내가 건물 생성, 파괴, 내가 만든 manipluate 위젯하도록되어있어 어디서든

문제는 내가 하지 좋은으로 간단한 프로그램을 만들고 있어요입니다 버튼은 모든 것이 대칭이며, 자동으로 모든 것을 이동하고 공간을 배치하는 레이아웃을 통해 균등하게 간격을두고 처리해야합니다. 그러나 내가 아는 유일한 방법은 레이아웃을 수동으로 인스턴스화하고 위젯을 추가 한 다음 좌표를 설정할 수 없다는 것입니다.

위젯을 인스턴스화하고 추가 할 수있는 방법은 무엇입니까? 프로젝트가 프레임을 생성 했습니까?

  Tile *tile = new Tile; 
      tile->setImg("://Images/placeholderTile.png"); 
      tile->setCol(true); 
      tile->setGeometry(retX(line),retY(line),50,50); 

내가 (단지 코드에 의해) 에디터의 외부 프레임에 내 자신의 위젯을 추가하려면, 반복하려면 : 나는 다음 내 자신의 매개 변수를 설정하는 경우 내 클래스를 인스턴스화하고있어 어떻게 입니다 , 코드를 사용하여 수동으로 프레임 주위로 이동할 수 있어야합니다. QFrame에서 액세스 할 수있는 ".addWidget()"메서드가 없지만 디자이너 내에서 자식이 될 수 있습니다. 코드로이 작업을 수행 할 수없는 이유는 무엇입니까? 수동으로 작업을 시도 할 때마다 어떤 레이아웃에, 어떤 시도 내가 수동으로 아무것도하지 않는 위젯의 위치를 ​​설정 할 수 있습니다. 나는 setGeometry

내가이 계속 검색 2 시간이 나는 마침내 내 대답을 가로 질러왔다 후 내 문제를 해결

를 오버라이드 (override)하지 않은 코드로 위젯의 부모를 설정할 수 있다고 생각한 적은 없습니다. 반대가 아닌 다른 것의 자식으로 추가해야한다고 엄격히 생각 했으므로 결코 생각하지 못했습니다.

그럼 단순히 라인을 추가하여 :

  tile->setParent(ui->frame); 

내 문제가 완전히 수정되었습니다. 이 사이트에서 허용 할 경우이 게시물을 변경하고 내일 응답을 제출합니다.

실제로 실제로 왔던 사람들에게 감사드립니다. 나는 그 문제를 해결할 수있어서 기쁘다.

+0

제 문제가 수정되었습니다. 그러나 낮은 담당자로 인해 답변으로 제출할 수 없으므로 질문에 추가 할 것입니다. – Yattabyte

답변

2

당신이 필요로하는 위젯의 생성자에 부모를 전달하는 것입니다 : Tile 이후

Tile *tile = new Tile(ui->frame); // <-- here 
tile->setImg("://Images/placeholderTile.png"); 
tile->setCol(true); 
tile->setGeometry(retX(line),retY(line),50,50); 

당신은 확실히 Qt는 스타일이 있어야합니다, 자신의 클래스, 부모 복용 그것을 명시 적 생성자를 :

class Tile : public QWidget { 
    ... 
public: 
    explicit Tile(QWidget * parent = 0) : QWidget(parent) { ... } 
}; 

또 다른 방법은 개체간에 유지되어야 할 관계에 대해 알고있는 레이아웃을 작성하는 것입니다. 한 번 해보면 맞춤 레이아웃을 작성하는 것이 그렇게 어렵지 않습니다.