제목에 다소 차이가 있습니다. 위젯을 만들어 QTabWidget에 추가하고 새 탭으로 전환하면 앱이 다운됩니다.Qt 앱 QTab 위젯에 탭을 추가 한 후 크래시가 발생합니다.
preferencestab.h (위젯 내가 추가 할)
#ifndef PREFERENCESTAB_H
#define PREFERENCESTAB_H
#include <QWidget>
#include "tab.h"
class PreferencesTab : public QWidget
{
Q_OBJECT
public:
explicit PreferencesTab(QWidget *parent = 0);
~PreferencesTab();
int num;
private:
private slots:
};
#endif // PREFERENCESTAB_H
preferencestab.cpp
#include "preferencestab.h"
#include <QDebug>
PreferencesTab::PreferencesTab(QWidget *parent) : QWidget(parent)
{
}
PreferencesTab::~PreferencesTab()
{
}
tabmanager.cpp (QTabWidget의 서브 클래스 내가 새 탭을 추가)
...
void TabManager::openPreferences()
{
PreferencesTab *pref = new PreferencesTab();
int index = this->addTab(pref, "Edit");
this->setCurrentIndex(index); // It crashes on this line
}
내가 추락 한 행을 제거하면 새 탭을 만드는 데 성공하지만 사람이있을 때 충돌합니다. 그것으로 전환하십시오.
그것은 어리석은 뭔가 여야 만하지만 오류를 찾을 수 없습니다. 도와주세요
디버거가 해당 행에서 어떤 일이 발생했는지에 대해 어떻게 말합니까? – cmannett85
@ cbamber85 "프로그램이 예기치 않게 끝났습니다"만 Qt가 오류를 어떻게 든 관리하고 닫습니다. 그러나 나는 포인터와 같은 포인터가 가리키는 것으로 생각되는 객체의 메서드를 사용하려고 할 때 전에는 이런 일이 발생했다고 생각하지만 사실 null 포인터입니다. – Topo
@Topo 디버깅을하지 않는 것 같습니다. QtCreator에서 Ctrl-R 대신 F5 키를 눌러 디버그 모드를 시작합니다. "디버거"를 사용하면 cbamber85가 QtCreator를 의미하는 것이 아니라 GDB 자체를 의미합니다. 이것은 디버그 모드에서 QtCreator에 의해 실행되는 디버거이며 어떤 종류의 오류가 발생했는지 QtCreator에 알려줍니다. 또한 중단 점을 설정하고 코드를 단계별로 실행하여 변수 값을 검사 할 수 있습니다 (물론 오류가 발생하기 전에). 또 다른 옵션은 qDebug를 사용하여 변수를 출력하는 것입니다. 후보는'this' 포인터,'pref'와'index' 변수입니다; 그들의 가치를 확인하십시오. – leemes