Я изучаю 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(). Я понятия не имею, как его решить, любая помощь будет оценена
Когда вызывается setMainColorView()? Вы уверены, что в этот момент инициализирован тест? Если вы используете Qt Creator, запустите отладчик с точками останова, где вы инициализируете тест и где вы его используете. убедитесь, что он инициализирован первым, и когда он попадает на точку останова при ее использовании, проверьте его, убедитесь, что он действительный объект. – Ninjammer
@Ninjammer setMainColorView() вызывается из другого класса. Я пытаюсь использовать существующий тестовый объект, созданный в setToolbar, вместо создания другого объекта – NimazSheik
Я знаю, что вы пытаетесь сделать, и именно поэтому я предложил использовать отладчик с точками останова, чтобы вы могли проверить, что происходит в порядок, который вы ожидаете, и изучить объект, который вы пытаетесь использовать. Даже без контрольных точек, если вы запустили его через отладчик и попытаетесь использовать тестовый объект, вы можете увидеть на этом этапе, если тест равен null, или если что-то в testMethod() идет не так. – Ninjammer