我正在學習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的()。我不知道如何解決它,任何幫助,將不勝感激
什麼時候調用setMainColorView()?你確定測試是在那個時候初始化的嗎?如果您使用的是Qt Creator,請在初始化測試的位置以及使用它的位置運行帶有斷點的調試器。確保它首先被初始化,當它在使用它時碰到斷點時,檢查它是否確定它是一個有效的對象。 – Ninjammer
@Ninjammer setMainColorView()從另一個類中調用。我正嘗試使用在setToolbar中創建的現有測試對象,而不是創建另一個對象 – NimazSheik
我知道你在做什麼,這就是爲什麼我建議使用帶有斷點的調試器,以便您可以檢查事件是否發生在您期望的順序,並檢查您嘗試使用的對象。即使沒有斷點,如果通過調試器運行它,並且它在使用測試對象時發生段錯誤,那麼您可以在那時看到test是否爲null,或者如果testMethod()中的某些內容出錯了。 – Ninjammer