2015-12-09 4 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 Значение сигнала: неисправность Сегментация» со стрелкой, указывающей на Test- > TestMethod(). Я понятия не имею, как его решить, любая помощь будет оценена

+1

Когда вызывается setMainColorView()? Вы уверены, что в этот момент инициализирован тест? Если вы используете Qt Creator, запустите отладчик с точками останова, где вы инициализируете тест и где вы его используете. убедитесь, что он инициализирован первым, и когда он попадает на точку останова при ее использовании, проверьте его, убедитесь, что он действительный объект. – Ninjammer

+0

@Ninjammer setMainColorView() вызывается из другого класса. Я пытаюсь использовать существующий тестовый объект, созданный в setToolbar, вместо создания другого объекта – NimazSheik

+1

Я знаю, что вы пытаетесь сделать, и именно поэтому я предложил использовать отладчик с точками останова, чтобы вы могли проверить, что происходит в порядок, который вы ожидаете, и изучить объект, который вы пытаетесь использовать. Даже без контрольных точек, если вы запустили его через отладчик и попытаетесь использовать тестовый объект, вы можете увидеть на этом этапе, если тест равен null, или если что-то в testMethod() идет не так. – Ninjammer

ответ

1

Я все время искал не то место. Я решил это, передав объект панели инструментов в класс, с которого я вызывал setMainColorView(). В этом классе я создал локальную переменную объекта панели инструментов, назначил это. И тогда это сработало.

Смежные вопросы