标题或多或少说明了一切。我创建一个小部件,将其添加到QTabWidget,当我切换到新选项卡时,应用程序崩溃。
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
}
如果我删除它崩溃的行,则成功创建新标签但在我手动切换到它时崩溃。
它一定是傻事,但我找不到错误。请帮助
答案 0 :(得分:3)
尝试调试您的应用程序。
在QtCreator中,按F5(在mac上为⌘-Y)而不是Ctrl-R启动调试模式。这将启动一个调试器(例如GDB),告诉QtCreator(然后告诉你)发生了什么样的错误。您还可以设置断点,逐步执行代码并检查变量值(当然在错误发生之前)。
另一个选择是使用qDebug打印出变量。候选人是this
指针,pref
和index
变量;检查他们的价值观。
也就是说,导致崩溃的问题很可能在PreferencesTab
级之外,甚至可能在TabManager
级之外。执行类方法中的代码并不意味着它是一个有效的&#34; call(= this
指针有效)。因此,检查this
指针始终是跟踪对null或无效指针的调用的好主意。
如果TabManager
是QObject
,即使调试this
指针也会失败(如果它无效),因为qDebug() << this
会要求metaObject()
,如果this
指针无效,则(很可能)是无效读取。