2014-09-17 1 views
0

mainwindow.cpp에서 대화 상자 유형 위젯의 일부 기능에 액세스하고 싶습니다.(Qt) 내 MainWindow에서 다른 위젯 클래스의 함수를 사용하려고 할 때 읽기 오류가 발생했습니다.

나는이처럼 보이는 int를 돌려 위젯 클래스의 간단한 기능을 만들었습니다

:

dialog.h :

public: 
     int getRowCountData(); 

dialog.cpp :

int Dialog::getRowCountData() 
{ 
     return ui->tableWidget->rowCount(); 
} 

사용법 :

내 mainWindow.h :

(210)
private: 
    Dialog *dialog; 

내 mainwindow.cpp :

dialog = new Dialog; 


int count = dialog->getRowCountData(); <<<<<--------------this throws a read access error! 

코드 :

가 어떻게 같은 간단한 하나 다른 위젯의 공공 기능을 사용할 생각이 0x0의 FLA = 0x0으로 :에서 액세스 위반 읽기가 0xc0000005 ?

행 개수 기능을 사용하여 정수를 참조하지 않아야합니다. 위젯간에 데이터를 전송할 때 신호와 슬롯을 사용하면 과거의 신호와 슬롯이 좋았지 만 가능한 경우 대화창 위젯의 기능을 계속 사용하고 싶습니다.

this question: AccessingQTableWidget's data from another class을 게시하여 다른 위젯에서 데이터를 검색하는 방법에 대해 설명했습니다. @ 체르노빌 (Chernobyl) 어쩌면 당신은 더 많은 통찰력을 제공 할 수 있을까요?

미리 감사드립니다.

+0

질문에 더 많은 코드가 필요하며 문제가 표시되지 않습니다. – hyde

+0

또한 bcaktrace가 좋습니다. 만약 당신이 지금 질문에서 가리키는 라인이라면,'dialog' 포인터는 0입니다. 왜, 질문에서 분명하지 않습니다. – hyde

+0

Qt Creator에서'new Dialog' 및'dialog->'로 행을 이동하고'dialog' 이름 모두에서 F2를 누릅니다. 그들은 당신을 같은 장소 (아마도 클래스의 .h 파일에있는 선언)로 데려다 줄까요? 중단 점을 설정하거나 둘 다에 대한 디버그 인쇄물을 추가하여 사용하기 전에'대화 상자 '가 실제로 생성되었는지 확인하십시오. – hyde

답변

1

아니요. 잘못된 포인터 사용에 문제가 있습니다. 이 실행은 정확히 이것을 의미합니다.

대화 상자 포인터가 null이 아닌지 확인하고 ui-> tableWidget이 존재하지 않을 수 있습니다. 충돌이 한 번보다 개체 이상을 삭제

  • 에 의해 발생 일이 같은

    if(!dialog) 
    qDebug() << "fail"; 
    else 
    {qDebug() << "good";//your call} 
    

    대부분의 시간 : 당신의 Qt 디자이너에서

    쓰기이 만든 위젯을 사용하려는 경우 setupUi를 호출해야합니다

  • 매달린 포인터 (즉, 이미 삭제 된 포인터 에 대한 포인터)에 액세스
  • null 포인터에 액세스
+0

Setupui가 호출되었고 getRowCountData()가 기본 윈도우의 대화 상자 인스턴스 멤버임을 쉽게 알 수있었습니다. 거기에 문제 없습니다. – Rachael

+0

@Rachael 내 편집을 참조하십시오. 나는 대화에 대해서도 너에게 말했다. 이 코드가있는 럼. 실패했거나 좋았 니? – Chernobyl

+0

나는 너희들이 말하는 것을보고, 나는 엉덩이처럼 느껴진다. 최대한 빨리 대화 상자에 null 체크를 추가 할 것입니다. (아침에 제일 먼저.) 여기에 나와 함께 해 주셔서 감사합니다. – Rachael

관련 문제