【问题标题】:QT creator - 'QGraphicsScene' does not name a typeQT 创建者 - 'QGraphicsScene' 没有命名类型
【发布时间】:2016-10-05 12:07:42
【问题描述】:

我是 QT 的新手,正在尝试自学。

按照示例/教程,我得到了这段代码。

目的是创建一个允许登录的简单界面。

我的错误:

mainwindow.h:22: error: 'QGraphicsScene' does not name a type
     QGraphicsScene *scene;

我还没有找到解决方案,只是提到从 UI 中删除对象并在实例化 QGraphicsScene 时使用 this 而不是 ui->graphicsView

我错过了什么?

Headers/mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCore>
#include <QtGui>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QGraphicsScene *scene;
};

#endif // MAINWINDOW_H

Sources/mainwindow.cpp

#include "mainwindow.h"
//#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scene = new QGraphicsScene(ui->graphicsView);
    scene->setSceneRect(ui->graphicsView->rect());
    ui->graphicsView->setScene(scene);
    ui->graphicsView->setFixedSize(400,400);
    QPixmap pixmap("res/logo/logo-black.png");
    scene->addPixmap(pixmap);
    ui->graphicsView->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

Sources/main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Forms/mainwindows.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>283</width>
    <height>415</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QLineEdit" name="lineEdit">
    <property name="geometry">
     <rect>
      <x>120</x>
      <y>130</y>
      <width>141</width>
      <height>22</height>
     </rect>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_2">
    <property name="geometry">
     <rect>
      <x>120</x>
      <y>170</y>
      <width>141</width>
      <height>22</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>90</x>
      <y>250</y>
      <width>91</width>
      <height>31</height>
     </rect>
    </property>
    <property name="text">
     <string>Login</string>
    </property>
   </widget>
   <widget class="QCheckBox" name="checkBox">
    <property name="geometry">
     <rect>
      <x>90</x>
      <y>220</y>
      <width>101</width>
      <height>20</height>
     </rect>
    </property>
    <property name="text">
     <string>Remeber Me</string>
    </property>
   </widget>
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>130</y>
      <width>59</width>
      <height>14</height>
     </rect>
    </property>
    <property name="text">
     <string>Email</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>170</y>
      <width>59</width>
      <height>14</height>
     </rect>
    </property>
    <property name="text">
     <string>Password</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton_2">
    <property name="geometry">
     <rect>
      <x>96</x>
      <y>310</y>
      <width>80</width>
      <height>22</height>
     </rect>
    </property>
    <property name="text">
     <string>Register</string>
    </property>
   </widget>
   <widget class="QGraphicsView" name="graphicsView">
    <property name="geometry">
     <rect>
      <x>80</x>
      <y>0</y>
      <width>121</width>
      <height>111</height>
     </rect>
    </property>
    <property name="autoFillBackground">
     <bool>false</bool>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>283</width>
     <height>19</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

更新

  • 取消注释: #include "ui_mainwindow.h"Sources/mainwindow.cpp

原因是我在项目目录中没有看到ui_mainwindow.h,因此认为这是不必要的包含。

  • 添加 #include &lt;QGraphicsScene&gt;Headers/mainwindow.h

documentation page 发现 - 更多的是“如果我添加这个会发生什么”尝试,我认为 &lt;QtGui&gt; 包含 &lt;QGraphicsScene&gt;

谢谢

【问题讨论】:

    标签: c++ qt qgraphicsview qgraphicsscene qpixmap


    【解决方案1】:

    您必须包括以下内容:

    #include <QGraphicsScene>
    

    如上所述here

    【讨论】:

      【解决方案2】:

      您包含了不必要的标题,但没有包含必要的标题。要使用小部件模块,您只需要#include &lt;QtWidgets&gt;mainwindow.h 文件的开头应该如下:

      #ifndef MAINWINDOW_H
      #define MAINWINDOW_H
      
      #include <QtWidgets>
      
      namespace Ui {
        ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 2022-01-21
        • 2023-04-07
        • 2021-02-03
        • 2017-04-01
        • 2015-06-09
        相关资源
        最近更新 更多