试图访问对象的方法时出现C++Qt分段错误

C++ Qt Segmentation fault when trying to access method of an object

本文关键字:C++Qt 分段 错误 方法 访问 对象      更新时间:2023-10-16

我正在学习Qt,遇到了一个问题。我想在这里得到一些帮助,因为我尝试更改变量并调试它,但还没有想出解决方案。我会提供一些代码来理解我有的问题

在我的ColorButton.h类文件中

class ColorButton : public QToolButton
{
    Q_OBJECT
 public:
   explicit ColorButton(const QColor &color, QWidget *parent = 0);
   void testMethod();
};

我的ColorButton.cpp文件类似于这个

ColorButton::ColorButton(const QColor &color, QWidget *parent)
{
    //some code
}
void ColorButton::testMethod()
{
   //This is
   //a test method
}

我正试图从另一个类访问此testMethod()。

从这个类中,头文件是Toolbar.h

class ToolBar : public QToolBar
{
    Q_OBJECT
public:
    explicit ToolBar(const QMap<ToolsEnum, QAction*> &actionMap, QWidget *parent = 0);
private:
    void setToolbar(); //initialize items
    ColorButton *test; //-----
public slots:
    void setMainColorView();
}

Toolbar.cpp文件类似于以下

ToolBar::ToolBar(const QMap<ToolsEnum, QAction *> &actionMap, QWidget *parent) :
QToolBar(tr("Tools"),parent), actionMapVar(actionMap)
{
    setToolbar();
}
void ToolBar::setToolbar()
{
  test = new ColorButton(QColor("#8C001A"));
}
void ToolBar::setMainColorView()
{
 test->testMethod();
}
}

当我把test->testMethod();到setToolbar()中,但我希望在setToolbar中创建对象并在setMainColorView()中调用方法

到目前为止,我已经尝试将Color按钮变量公开,我也尝试过在构造函数中初始化名为test的对象,但两者都不起作用。

现在,有了这个代码,我得到的错误是"由于收到来自操作系统的信号,劣机停止运行。信号名称:SIGSEGV信号含义:分段故障"箭头指向test->testMethod()。我不知道如何解决它,任何帮助都将不胜感激

我一直在看错误的地方。我通过将工具栏对象传递到调用setMainColorView()的类中来解决这个问题。在那个类中,我制作了一个工具栏对象的局部变量,分配给它。然后它起了作用。