2013-01-07 1 views
0

Qt를 처음 사용했습니다. 그대로, 버튼이있는 테이블이 있습니다 btn. 버튼을 클릭하면 setCentralWidget(view)이 창을 인계하므로 더 이상 테이블을 더 이상 볼 수 없습니다. 그러나 setCentralWidget(view)을 제거하면 버튼을 클릭해도 아무 것도 표시되지 않습니다.MainWindow에 두 개의 위젯 표시

같은 창에 둘 다 표시 할 수있는 방법이 있습니까? 분할 또는 도킹 어쩌면?

(내 질문에 무관하다 내가 제거한 코드)

MainWindow::MainWindow() 
{ 
    //etc 

    packet = new QTabWidget; 
    setCentralWidget(packet) 
} 

//other code 

void MainWindow::create(const QString &a) 
{ 
     QTableWidget* table = new QTableWidget; 
     int tabIndex = packet->addTab(table, a); 
     packet->setCurrentIndex(tabIndex); 

     table->setRowCount(1); 
     table->setColumnCount(2); 

     table->setHorizontalHeaderLabels(QString("a;Simulator").split(";"));")); 

     table->setItem(0,0,new QTableWidgetItem(a)); 

     QPushButton *btn = new QPushButton("load", this); 
     connect(btn, SIGNAL(clicked()), this, SLOT(sim())); 
     table->setCellWidget(0,1, btn); 
} 

void MainWindow::sim() 
{ 
    QGraphicsScene* scene = new QGraphicsScene(QRect(-10, -10, 100, 50)); 
    QGraphicsView* view = new QGraphicsView(); 
    scene->addText("Network"); 
    view->setScene(scene); 
    view->setGeometry(QRect(10, 10, 100, 50)); 

    setCentralWidget(view); 
} 
+0

스타일 nitpick : split()을 피하십시오. 'table-> setHorizontalHeaderLabels (QStringList() << "a"<< "시뮬레이터")' –

답변

0

당신은 QMdiArea 클래스를 보라 - 많은 내부 위젯을 가질 수있는 메인 화면의 중앙 위젯으로 사용할 수 있도록 설계 . 그것은 다양한 레이아웃 스타일을 가지고 있습니다 - 그 페이지를 아래로 스크롤하여 예제를보십시오.

희망 하시겠습니까?

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 체크 할 것이다 :) – Ash

0

QWidget을 서브 클래스해야합니다. 예를 들어 자신 만의 MyWidget 클래스를 만들 수 있습니다. 그리고이 클래스는 예를 들어 스플리터에 QGraphicsView와 QTabWidget을 포함합니다. MainWindow에서 중앙 위젯을 MyWidget의 인스턴스로 설정하십시오.