2015-12-09 81 views
0

我正在學習Qt,並且我提出了一個問題。我想要一些幫助,在這裏我試着改變變量並調試它,但還沒有提出解決方案。我將提供一些代碼來了解我有嘗試訪問對象的方法時C++ 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(); 
} 
} 

程序工作,當我把測試 - > TestMethod的();到setToolbar()中,但我想要在setToolbar()中創建對象,並在setMainColorView()中調用方法。

到目前爲止,我已經嘗試使顏色按鈕變量公開, 我也嘗試在構造函數中初始化名爲test的對象,但都不起作用。

眼下,這個代碼我得到的錯誤是 「的劣質停止,因爲它從操作系統接收到信號 信號名稱:SIGSEGV 信號含義:段錯誤」 與測試 - 一個箭頭指向> TestMethod的()。我不知道如何解決它,任何幫助,將不勝感激

+1

什麼時候調用setMainColorView()?你確定測試是在那個時候初始化的嗎?如果您使用的是Qt Creator,請在初始化測試的位置以及使用它的位置運行帶有斷點的調試器。確保它首先被初始化,當它在使用它時碰到斷點時,檢查它是否確定它是一個有效的對象。 – Ninjammer

+0

@Ninjammer setMainColorView()從另一個類中調用。我正嘗試使用在setToolbar中創建的現有測試對象,而不是創建另一個對象 – NimazSheik

+1

我知道你在做什麼,這就是爲什麼我建議使用帶有斷點的調試器,以便您可以檢查事件是否發生在您期望的順序,並檢查您嘗試使用的對象。即使沒有斷點,如果通過調試器運行它,並且它在使用測試對象時發生段錯誤,那麼您可以在那時看到test是否爲null,或者如果testMethod()中的某些內容出錯了。 – Ninjammer

回答

1

我一直在看整個時間錯誤的地方。我解決了這個問題,把我的工具欄對象放到我正在調用setMainColorView()的類中。在那個類中,我做了一個工具欄對象的局部變量,賦值給它。然後它工作。

相關問題