2012-07-29 2 views
0

Qt를 사용하는 학생 개발자는 사용자가 여러 파일에있는 특정 데이터 열을 플로트 할 수 있도록 GUI를 작성합니다. 설정하고있는 기능으로 사용자는 각 행의 버튼을 사용하여 파일을 선택할 수 있습니다. 따라서 버튼은 원래 찾아보기라고 말한 다음 사용자가 클릭하여 파일을 선택하는 대화 상자를 열면 버튼 텍스트가 선택한 파일 이름으로 바뀝니다. 이야기를 위해 유감스럽게 여기고; 내 간단한 시도가 어떤 선명도를 추가합니다.QTableWidget 내의 QPushButton을 캐치/연결하는 기능

내가 겪고있는 문제는 클릭 한 버튼에 대해 정책을 설정하는 방법을 잘 모르겠다는 것입니다. 나는 각각의 QPushButtons의 기능을 확장해야 할 것이라고 생각하지만 실제로 그렇게하는 방법을 모른다. 지금까지 셀 위젯을 설정하기 위해 다음을 사용하고 있습니다.

//with row count set dimensions are set becasue column count is static 
    //begin bulding custom widgets/QTableWidgetItems into cells 
    for(int x = 0; x < ui->tableWidgetPlotLineList->rowCount(); x++) 
    { 
     for(int y = 0; y < ui->tableWidgetPlotLineList->columnCount(); y++) 
     { 
      if(y == 1) 
      { 
       //install button widget for file selection 
       QPushButton *fileButton = new QPushButton(); 
       if(setDataStruct.plotLineListData.at(rowCount).lineFileName != ""); 
       { 
        fileButton->setText(setDataStruct.plotLineListData.at(rowCount).lineFileName); 
       } 
       else 
       { 
        fileButton->setText("Browse..."); 
       } 
       ui->tableWidgetPlotLineList->setCellWidget(x, y, fileButton); 
      } 

것은 내가

connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x)); 

트릭을 할 수 있다는 생각하지만 난 아마 여기에 잘못된 방향으로 갈거야 생각합니다. 솔직히 나는 그것이 어디로 갈지에 관해서는 너무 확신하지 못한다 ...

내 게시물을 읽어 주셔서 고마워. 이 게시물에서 부족한 것이 있으면 알려 주시고 즉시 업데이트하겠습니다. 나는 또한이 포스트에 어떤 공헌든지 사전에 감사하고 싶으면!

답변

2
connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x)); 

신호/슬롯 연결에 대한 구문 상 올바르지 않습니다. 이런 식으로 뭔가가 더 적절할 것 :

connect(fileButton, SIGNAL(clicked()), this, SLOT(selectPlotLineFile(x)); 

...

당신이 특정 버튼에 액세스해야하는 경우가 emit 에드 당신이 당신의 슬롯에 sender() 기능을 사용할 수보다 clicked() 신호 :

void selectPlotLineFile() { 
    QPushButton *button = dynamic_cast<QPushButton*>(sender()) 
} 

이제 어떤 행을 조작하는지 알 수 있습니다. 몇 가지 다른 접근 방식이 있습니다. 어느 버튼이 어떤 행에 속하는지 조회하는 데 사용할 수있는 QMap<QPushButton*, int> 구성원 변수를 유지하는 것이 더 쉬운 방법 중 하나입니다.

+0

흥미 롭군요.이 기능이 작동하는지 알아보기 위해 여기를 터치 한 일부 지점에 대해 조사를 수행해야합니다. 나는 다이내믹 캐스팅으로 일한 적이 없으며 접근 방법이 너무 명확하지 않습니다. 게시 한 코드에서 나는 dynamic_cast (보낸 사람()) 원래 단추를 ​​눌렀을 대신 걸릴 것을 가져갑니다. 어떤 경우에 행을 selectPlotLineFile 매개 변수로 전달하도록 전달할 수 있습니다. 어떤 추가 생각 나는 연결 (fileButton, SIGNAL (clicked()), this, SLOT (selectPlotLineFile (x));? –

+1

신호/슬롯 연결을 사용하여 전달 된 행을 지정할 수 없습니다. 맵과 같은 것을 사용하여 어떤 버튼이 어떤 행과 연관되어 있는지 추적 할 수 있습니다. – Chris

+0

지도가 위젯의 벡터 또는 배열과 비슷합니까? 이제이 기능의 사용에 대한 조사를 할 것입니다. 인내심을 유지하면서 나는 여전히 학생 신분이다 .Lol은 아마 영원 할 것이다! –