最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

完美解決QT?QGraphicsView提升到QChartView報錯的問題

 更新時間:2023年05月11日 09:54:46   作者:Foxalien  
使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報錯呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報錯解決方案,感興趣的朋友一起看看吧

QT QGraphicsView 提升到 QChartView報錯 解決方案

本文主要描述,使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報錯.

[問題描述]

使用QGraphicsView顯示圖表的時候,我們需要將它提升為QChartView.但提升后再此運行一般會發(fā)生編譯報錯,錯誤發(fā)生在自動生成的UI頭文件中.如下圖:

在這里插入圖片描述

使用QT提供的QChartView,提升QGraphicsView后遇到的問題解決方案

[解決方案]

臨時方案(主要是修改ui_xxxx.h文件)終極解決方案(針對網(wǎng)上好多方案都是修改ui_xxx.h文件,然后重新編譯后又報錯,又要修改)

[問題分析]

我們來分析一下這個問題:

  • 錯誤提示說 QChartView does not name a type.
    • 疑問一: 為什么說 不能命名成一個類型呢?
    • 疑問二: ui_mainwindow.h文件中已經(jīng)有qchartview.h頭文件了,不認識QChartView?

在這里插入圖片描述

帶著疑問,我們?nèi)タ聪聁chartview.h的源代碼:

在這里插入圖片描述

大概理解或者猜一下,開始一個命名空間?
點擊進去我們再看看這個QT_CHARTS_BEGIN_NAMESPACE是個什么?

在這里插入圖片描述

看到這個的話,應(yīng)該都比較清楚了,這是給QChartView 加了一個命名空間.
所以我們在使用的時候要把命名空間帶上.
清楚這個了,我們開始看怎么解決這個問題.

[方案描述]

既然ui_xxx.h文件報錯,那么我們先修改一下這個文件,讓他不報這個錯,看看是否能解決問題.
第一種: 將 QtCharts這個命名空間加到我們的代碼上.
修改前

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
#include <qchartview.h>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QChartView *graphicsView; // 修改前
    ...
    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(800, 600);
        centralwidget = new QWidget(MainWindow); 
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        graphicsView = new QChartView(centralwidget);// 修改前
        ...
    }

修改后

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
#include <qchartview.h>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QtCharts::QChartView *graphicsView; //修改后
    ...
    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(800, 600);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        graphicsView = new QtCharts::QChartView(centralwidget); // 修改后
        ...

修改后,代碼編譯通過,運行結(jié)果如下:

在這里插入圖片描述

第二種: 在ui_xxx.h文件中把命名空間加上:using namespace QtCharts; 或者直接使用 QT已經(jīng)定義好的:QT_CHARTS_USE_NAMESPACE

在這里插入圖片描述

#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
#include <qchartview.h>
//using namespace  QtCharts;
QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE

編譯運行,也能正常運行.
繼續(xù)思考:
這個ui_xxx.h文件是自動生成的,如果重新編譯的話,我們的修改都被覆蓋掉了,我們難道再去修改? 顯然不是最佳方案.

注意到ui_xxx.h的文件注釋: WARNING! All changes made in this file will be lost when recompiling UI file!

/********************************************************************************
** Form generated from reading UI file ‘mainwindow.ui’
**
** Created by: Qt User Interface Compiler version 5.15.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

所以: 修改ui_xxx.h文件顯然不合適.
那么我們需要將這個命名空間在ui_xxx.h使用QChartView之前先using.

1.將QT_CHARTS_USE_NAMESPACE 直接添加到 mianwindow.h文件里面.如下:

在這里插入圖片描述

2.編譯通過,運行得到我們想要的結(jié)果將 QT_CHARTS_USE_NAMESPACE 放到mainwindow.cpp里面.
同樣的錯誤又出現(xiàn)了

在這里插入圖片描述

難道不能放到 mainwidow.cpp里面?
既然這個namespace是在ui_xxx.h文件中用呢,那我把這定義到前面不就可以嗎?
修改后,再一次編譯運行: 成功,如下圖:

在這里插入圖片描述

至于命名空間,大家根據(jù)自己習慣和情況放到合適的地方就行.

繼承QChartView, 提升QGraphicsView控件

先看問題: 如下圖,我們編譯會報錯,但報錯的提示信息和之前的是不一樣的.

在這里插入圖片描述

提示信息:ui_mainwindow.h:18: error: ctqchartview.h: No such file or directory

提示是說找不到這個文件或文件夾. 怎么理解呢?
意思就是這個頭文件的路徑不對了.
看下我們的代碼,ctqchartview是在CtChartView這個目錄下的. 那我們在ui_xxx.h文件中修改下路徑
修改路徑后,成功編譯運行如下:

在這里插入圖片描述

修改后,是可以編譯運行了,但我們還是會遇到之前的問題,重新編譯后,這塊還是會報錯,我們還要修改再編譯運行.

那么有沒有 一個修改一次后面就不用再改的方案呢?
答案是肯定的.

方案一:

思考一下,我們ui_xxx.h文件中的 <ctqchartview.h> 是從那來的?
是不是我們在點擊提升的時候,我們自己填的呢?
如下圖: 這個 頭文件不就是這個嗎?

在這里插入圖片描述

所以ui_xxx.h文件中會生成一個 #include “ctqchartview.h” 這句代碼.
但引入進去后會提示找不到, 那我們把路徑加上去,不就可以了嗎? 如下圖,點擊添加

在這里插入圖片描述

直接編譯運行: 成功,如下圖:

在這里插入圖片描述

方案二:

我們的CtQChartView是繼承QChartView的, 那我們能不能
在提升的時候,類寫CtQChartView, 頭文件 qchartview.h 呢?
如下圖:

在這里插入圖片描述

這樣提升后,我們編譯試試: 報錯,看提示應(yīng)該是沒找到這個類.

在這里插入圖片描述

解決: 在mainwindow.h文件中我們引入#include “CtChartView/ctqchartview.h” 這個頭文件,再此編譯運行.
結(jié)果如下圖:

在這里插入圖片描述

接著繼續(xù), 看ui_xxx.h文件,發(fā)現(xiàn)聲明: CtQChartView *graphicsView;
定義:graphicsView = new CtQChartView(centralwidget);
都沒用qchartview.h文件呀, 那把這個頭文件刪除掉,能編譯成功嗎?

在這里插入圖片描述

一樣可以成功,那這代表什么呢?
猜想一下,那我們提升的時候,只寫一個類,然后在mainwindow.h文件中include的這個類的頭文件,是不是也可以呢?
如下圖:如果不填頭文件的話,不讓添加.

在這里插入圖片描述

再思考下,那我給這個頭文件寫一個ui_xxx.h中已經(jīng)存在的頭文件,可行嗎? 或者我把這個頭文件寫成QObject可行嗎?
例如我填一個 QtWidgets/QMenuBar. 編譯運行.可成功.

在這里插入圖片描述

基于以上,我們是不是可以思考一下結(jié)論:

  • 提升QGraphicsView 的類,只要在 ui_xxx.h 頭文件前引用就可以.
  • 在xxx.ui文件中提升QGraphicsView的時候,只要正確填寫我們希望提升的類名就可以了. 當然頭文件也需要填寫一個正確的.

到此這篇關(guān)于完美解決QT QGraphicsView提升到QChartView報錯的問題的文章就介紹到這了,更多相關(guān)QChartView報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言繪制雷達圖的示例代碼

    C語言繪制雷達圖的示例代碼

    常用的統(tǒng)計圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,其中還有一種雷達圖的繪制也較難,本文為大家提供了雷達圖的繪制方法,需要的可以參考下
    2024-02-02
  • C++ Primer Plus詳解

    C++ Primer Plus詳解

    這篇文章主要為大家詳細介紹了C++ Primer Plus,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言PlaySound函數(shù)使用方法

    C語言PlaySound函數(shù)使用方法

    這篇文章介紹了C語言PlaySound函數(shù)的使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 通過C++獲取CPU占用率的代碼示例(windows、linux、macOS)

    通過C++獲取CPU占用率的代碼示例(windows、linux、macOS)

    本文介紹了在Windows、Linux和macOS平臺下使用C++獲取CPU占用率的多種方法,包括系統(tǒng)整體CPU占用率和特定進程CPU占用率的計算公式和實現(xiàn)代碼示例,需要的朋友可以參考下
    2025-03-03
  • C語言實現(xiàn)24點游戲源代碼

    C語言實現(xiàn)24點游戲源代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)24點游戲源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言自定義類型詳解(結(jié)構(gòu)體、枚舉、聯(lián)合體和位段)

    C語言自定義類型詳解(結(jié)構(gòu)體、枚舉、聯(lián)合體和位段)

    這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體、枚舉、聯(lián)合體和位段自定義類型的相關(guān)資料,分別介紹了結(jié)構(gòu)體、枚舉、聯(lián)合體和位段等四種自定義類型,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • C++中push_back()函數(shù)的具體使用

    C++中push_back()函數(shù)的具體使用

    本文主要介紹了C++中push_back()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • 解析之C++的列表初始化語法

    解析之C++的列表初始化語法

    有朋友在使用std::array時發(fā)現(xiàn)一個奇怪的問題:當元素類型是復合類型時,編譯通不過。按說std::array和原生數(shù)組的行為幾乎是一樣的,可為什么當元素類型不同時,初始化語法還會有差別?這篇文章會介紹這個問題的原理,以及正確的解決方式。
    2021-05-05
  • VS報錯C1189及MSB3721解決方法

    VS報錯C1189及MSB3721解決方法

    在使用VS進行CUDA編譯時出現(xiàn)錯誤,本文主要介紹了VS報錯C1189及MSB3721解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 詳解C++?STL模擬實現(xiàn)list

    詳解C++?STL模擬實現(xiàn)list

    這篇文章主要為大家詳細介紹了C++如何模擬實現(xiàn)STL容器list,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2023-01-01

最新評論

井冈山市| 宁国市| 潞西市| 教育| 万荣县| 神池县| 沙河市| 湘潭县| 平顺县| 平原县| 乌拉特后旗| 柞水县| 桃园县| 城步| 双江| 凌海市| 永德县| 颍上县| 文水县| 元谋县| 宁强县| 五台县| 紫金县| 弥勒县| 涞源县| 乌苏市| 甘南县| 浦城县| 惠州市| 石阡县| 阳江市| 天峨县| 潜山县| 正蓝旗| 密云县| 中方县| 乃东县| 蚌埠市| 本溪| 舒兰市| 芜湖市|