Qt:为什么我的自定义qgraphicsview小部件在Linux上编译时会产生错误?

Qt:为什么我的自定义qgraphicsview小部件在Linux上编译时会产生错误?,linux,qt,Linux,Qt,我的Qt项目在Windows上编译成功,但当我尝试在Linux上编译它时,它会给我各种错误,包括我在这里询问的错误: 我的项目中有一个定制的QGraphicsView类,它是由Qt设计器提示的。当我在Linux机器上编译代码时,它会给我错误: /usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:55: error: ISO C++ forbids declaration of ‘myGraphicsView’ with no type /usr/mvl

我的Qt项目在Windows上编译成功,但当我尝试在Linux上编译它时,它会给我各种错误,包括我在这里询问的错误:

我的项目中有一个定制的QGraphicsView类,它是由Qt设计器提示的。当我在Linux机器上编译代码时,它会给我错误:

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:55: error: ISO C++ forbids declaration of ‘myGraphicsView’ with no type

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:55: error: expected ‘;’ before ‘*’ token

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h: In member function ‘void Ui_GTvalidation::setupUi(QDialog*)’:

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:173: error: ‘graphicsView’ was not declared in this scope

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:173: error: expected type-specifier before ‘myGraphicsView’

/usr/mvl1/hy2vf/metaData/bin/ui_gtvalidation.h:173: error: expected ‘;’ before ‘myGraphicsView’
有人有过同样的问题吗?解决办法是什么

下面是ui_gtvalidation.h中的部分,其中指出了问题所在。实际上,我不确定我应该发布代码的哪一部分来提供帮助,所以请告诉我您想要查看的内容

55:myGraphicsView *graphicsView;

173:graphicsView = new myGraphicsView(GTvalidation);
    graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
myGraphicsView.h

#include <QtGui>

class myGraphicsView : public QGraphicsView{

public:
myGraphicsView(QWidget* parent = 0);

~myGraphicsView(void); 

protected:
//Take over the interaction
virtual void wheelEvent(QWheelEvent* event);

};

您的问题实际上存在于
gtvalidation.ui
文件中。将小部件升级到自定义类时,需要正确指定包含头。由于某些原因,编译器在Linux中找不到指定的头。最简单的原因可能是大小写不匹配(因为Linux文件系统区分大小写,而Windows文件系统不区分大小写)。检查Designer中表单的升级设置中指定的头文件。

您需要显示MyGraphicsView类您的问题实际上在
gtvalidation.ui
文件中。将小部件升级到自定义类时,需要正确指定包含头。由于某些原因,编译器在Linux中找不到指定的头。最简单的原因可能是大小写不匹配(因为Linux文件系统区分大小写,而Windows文件系统不区分大小写)。在Designer中检查表单的升级设置中指定的头文件。感谢@PavelStrakhov解决了此问题。但是,我在这里找不到复选标记来标记你的答案。对不起,这里是新手。
#include "myGraphicsView.h"


myGraphicsView::myGraphicsView(QWidget *parent) : QGraphicsView(parent){
}

myGraphicsView::~myGraphicsView(void){
}

void myGraphicsView::wheelEvent(QWheelEvent* event) {

setTransformationAnchor(QGraphicsView::AnchorUnderMouse);

// Scale the view / do the zoom
double scaleFactor = 1.15;
if(event->delta() > 0) {
    // Zoom in
    scale(scaleFactor, scaleFactor);
} else {
    // Zooming out
    scale(1.0 / scaleFactor, 1.0 / scaleFactor);
}

// Don't call superclass handler here
// as wheel is normally used for moving scrollbars
}