2013-10-04 1 views
4

Я пытаюсь скомпилировать программу (найти здесь: http://sourceforge.net/projects/lisem/), следуя инструкциям, указанным автором. Однако, при компиляции в Qt Creator, он выдает ошибку:«класс QWidget» не имеет имени «setFrameStyle»

class QWidget has no member named setFrameStyle

этих строк кода в LisUIplot.cpp

47 HPlot = new QwtPlot(title, this); 
48 layout_Plot->insertWidget(0, HPlot, 1); 
49 HPlot->canvas()->setFrameStyle(QFrame::StyledPanel); 

и

142 smallPlot = new QwtPlot(title, this); 
143 smallPlot->setMinimumSize(300,300); 
144 smallPlot->resize(500,500); 
145 verticalLayout_6->insertWidget(0, smallPlot, 1); 
146 smallPlot->canvas()->setFrameStyle(QFrame::StyledPanel); 

Я надеюсь, что вы можете помочь меня на этом. Спасибо!

BTW, я использую Qt 5.1.1 MinGW 32-битную и QWT 6.1.0

ответ

6

Это вполне ожидаемо, поскольку QWidget не имеет такого члена. Это метод метода QFrame.

void QFrame::setFrameStyle(int style) 

Обратите внимание, холст геттер возвращает следующий тип, и не обязательно в QFrame:

QWidget * QwtPlot::canvas(); 
const QWidget * QwtPlot::canvas() const; 

Это должно быть проверено с динамическим/qobject_cast если возвращаемое значение фактически QFrame.

3

Причина наличия QWidget здесь заключается в том, что существует возможность использовать холст, полученный из QGLWidget. Но пока вы не назначаете его из своего приложения, ваш dynamic_cast (или qobject_cast) всегда будет успешным.