2014-09-17 3 views
0

Я хотел бы получить доступ к некоторым функциям виджета диалогового типа из моего mainwindow.cpp.(Qt) Ошибка чтения при попытке использовать любую функцию из другого класса виджетов на моем MainWindow

Я создал простую функцию в классе виджета, который возвращает INT, который выглядит следующим образом:

dialog.h:

public: 
     int getRowCountData(); 

dialog.cpp:

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

Использование:

мой главныйWindow.h:

private: 
    Dialog *dialog; 

мой mainwindow.cpp:

dialog = new Dialog; 


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

код: 0xc0000005 чтения нарушение прав доступа по адресу: 0х0 = 0х0 Flas

Как я использовать публичные функции другого виджета, как этот простой ?

Я не должен ссылаться на целое число, которое я хотел бы установить с помощью функции rowcount. Сигналы и слоты отлично работали для меня в прошлом, когда они использовали их для передачи данных между виджетами, но я хотел бы использовать функцию моего виджета диалога, как это, если смогу.

Я пришел к этому методу для извлечения данных на другой виджет, разместив this question: AccessingQTableWidget's data from another class. @ Чернобыль, может быть, у вас есть какое-то дальнейшее понимание?

Заранее благодарен!

+0

Вопрос нуждается в дополнительном коде, проблема не видна сейчас. – hyde

+0

Кроме того, bcaktrace будет хорошо. Если это строка, которую вы сейчас указываете в вопросе, указатель «dialog» равен 0. Почему, это не очевидно из вопроса. – hyde

+0

В Qt Creator перейдите к строкам с помощью 'new Dialog' и' dialog-> 'и нажмите F2 на оба имени диалогового окна. Представляют ли они вас в одно и то же место (возможно, объявление в .h файле класса)? Установите контрольные точки или добавьте отладочные отпечатки для обоих, чтобы увидеть, действительно ли создается диалоговое окно, прежде чем пытаться его использовать. – hyde

ответ

1

№ Проблема в использованииwerong указатель. Это исключение означает именно это.

Check is dialog pointer не равен null и, возможно, ui-> tableWidget не существует. Вы должны позвонить setupUi, если вы хотите использовать виджеты, которые создали в Qt Designer

написать следующее:

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

Большинство раз такой аварии случается вызвана

  • удаления объекта более одного раза
  • доступ к оборванному указателю (то есть указатель на уже удаленный объект )
  • доступ к нулевой указателю
+0

Вызывается Setupui, и я легко мог видеть, что getRowCountData() был членом экземпляра диалога в главном окне. Проблем нет. – Rachael

+0

@ Rachael см. Мое редактирование. Я тоже говорил вам об диалоге. Ром с этим кодом. Вы провалились или хорошо? – Chernobyl

+0

Теперь я вижу, что вы, ребята, говорите, и я чувствую себя прикладом. Будет добавлять нулевые проверки для 'dialog' ASAP (первое, что нужно утром). Спасибо, что вы здесь. – Rachael

 Смежные вопросы

  • Нет связанных вопросов^_^