尝试访问对象的方法时C ++ Qt Segmentation错误

时间:2015-12-09 19:32:56

标签: c++ qt pointers segmentation-fault cross-platform

我正在学习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-&gt; testMethod();到setToolbar(),但我希望在setToolbar()中创建对象,并在setMainColorView()中调用方法。

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

现在,使用此代码我得到的错误是 “劣势停止是因为它收到了来自操作系统的信号。 信号名称:SIGSEGV 信号含义:分段故障“ 用箭头指向test-&gt; testMethod()。我不知道如何解决它,任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我一直在寻找错误的地方。我通过将我的工具栏对象传递给我从中调用setMainColorView()的类来解决这个问题。在那个类中,我创建了一个工具栏对象的局部变量,分配了它。然后它奏效了。