gpt4 book ai didi

c++ - 向 QTabWidget 添加选项卡后 Qt App 崩溃

转载 作者:行者123 更新时间:2023-11-28 00:56:14 24 4
gpt4 key购买 nike

标题或多或少说明了一切。我创建了一个小部件,将其添加到 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
}

如果我删除它崩溃的行,它会成功创建新选项卡,但当我手动切换到它时崩溃。

这一定很愚蠢,但我就是找不到错误。请帮忙

最佳答案

尝试调试您的应用程序。

在 QtCreator 中,您可以通过按 F5(在 mac 上为 ⌘-Y)而不是 Ctrl-R 来启动 Debug模式。这将启动一个调试器(例如 GDB),它会告诉 QtCreator(然后它会告诉您)发生了什么类型的错误。您还可以设置断点、逐步执行代码并检查变量值(当然是在错误发生之前)。

另一种选择是使用 qDebug 打印出变量。候选人是 this指针,prefindex多变的;检查它们的值。

也就是说,导致崩溃的问题很可能在PreferencesTab 之外。类,甚至可能在TabManager之外类(class)。执行类方法中的代码并不意味着这是一个“有效”调用(= this 指针是有效的)。所以检查 this指针始终是跟踪对空指针或无效指针的调用的好主意。

如果TabManagerQObject , 甚至调试 this指针将失败(如果它无效),因为 qDebug() << this会要求 metaObject() ,如果 this,这将(很可能)是无效读取指针无效。

关于c++ - 向 QTabWidget 添加选项卡后 Qt App 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com