当我使用Ubuntu14.04中的Qt4.8.6在QtCreator3.3.2中编译示例代码时,出现以下错误:
videowidget.cpp:19: error: no match for call to '(QPalette) ()'
palette = palette();
^
在这个片段中:
VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent),surface(0)
{
setAutoFillBackground(false);
setAttribute(Qt::WA_NoSystemBackground,true);
setAttribute(Qt::WA_PaintOnScreen,true);
palette = this->palette();//here's the error
palette.setColor(QPalette::Background,Qt::black);
setPalette(palette);
setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
surface = new VideoWidgetSurface(this);
}
我在Qt助手中查找了
QPlalette
类和QWidget
类,并且QWidget
的手册上说:访问功能:
常量QPalette&palette()常量
void设置调色板(const QPalette&)
在我看来
QWidget
有palette()
功能,所以VideoWidget
肯定会有。但这样的错误就出现了。提前谢谢。
最佳答案
当用相同的名称声明变量时,隐藏palette()
。使用其他名称,例如:
QPalette myPalette = palette();
在您的代码片段中,您有另一个使用
this
的工作解决方案:QPalette palette = this->palette();