当我使用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&)
在我看来QWidgetpalette()功能,所以VideoWidget肯定会有。但这样的错误就出现了。
提前谢谢。

最佳答案

当用相同的名称声明变量时,隐藏palette()。使用其他名称,例如:

QPalette myPalette = palette();

在您的代码片段中,您有另一个使用this的工作解决方案:
QPalette palette = this->palette();

10-04 17:28