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

完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問(wèn)題

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

QT QGraphicsView 提升到 QChartView報(bào)錯(cuò) 解決方案

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

[問(wèn)題描述]

使用QGraphicsView顯示圖表的時(shí)候,我們需要將它提升為QChartView.但提升后再此運(yùn)行一般會(huì)發(fā)生編譯報(bào)錯(cuò),錯(cuò)誤發(fā)生在自動(dòng)生成的UI頭文件中.如下圖:

在這里插入圖片描述

使用QT提供的QChartView,提升QGraphicsView后遇到的問(wèn)題解決方案

[解決方案]

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

[問(wèn)題分析]

我們來(lái)分析一下這個(gè)問(wèn)題:

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

在這里插入圖片描述

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

在這里插入圖片描述

大概理解或者猜一下,開(kāi)始一個(gè)命名空間?
點(diǎn)擊進(jìn)去我們?cè)倏纯催@個(gè)QT_CHARTS_BEGIN_NAMESPACE是個(gè)什么?

在這里插入圖片描述

看到這個(gè)的話,應(yīng)該都比較清楚了,這是給QChartView 加了一個(gè)命名空間.
所以我們?cè)谑褂玫臅r(shí)候要把命名空間帶上.
清楚這個(gè)了,我們開(kāi)始看怎么解決這個(gè)問(wèn)題.

[方案描述]

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

#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); // 修改后
        ...

修改后,代碼編譯通過(guò),運(yùn)行結(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

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

注意到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文件顯然不合適.
那么我們需要將這個(gè)命名空間在ui_xxx.h使用QChartView之前先using.

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

繼承QChartView, 提升QGraphicsView控件

先看問(wèn)題: 如下圖,我們編譯會(huì)報(bào)錯(cuò),但報(bào)錯(cuò)的提示信息和之前的是不一樣的.

在這里插入圖片描述

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

提示是說(shuō)找不到這個(gè)文件或文件夾. 怎么理解呢?
意思就是這個(gè)頭文件的路徑不對(duì)了.
看下我們的代碼,ctqchartview是在CtChartView這個(gè)目錄下的. 那我們?cè)趗i_xxx.h文件中修改下路徑
修改路徑后,成功編譯運(yùn)行如下:

在這里插入圖片描述

修改后,是可以編譯運(yùn)行了,但我們還是會(huì)遇到之前的問(wèn)題,重新編譯后,這塊還是會(huì)報(bào)錯(cuò),我們還要修改再編譯運(yùn)行.

那么有沒(méi)有 一個(gè)修改一次后面就不用再改的方案呢?
答案是肯定的.

方案一:

思考一下,我們ui_xxx.h文件中的 <ctqchartview.h> 是從那來(lái)的?
是不是我們?cè)邳c(diǎn)擊提升的時(shí)候,我們自己填的呢?
如下圖: 這個(gè) 頭文件不就是這個(gè)嗎?

在這里插入圖片描述

所以u(píng)i_xxx.h文件中會(huì)生成一個(gè) #include “ctqchartview.h” 這句代碼.
但引入進(jìn)去后會(huì)提示找不到, 那我們把路徑加上去,不就可以了嗎? 如下圖,點(diǎn)擊添加

在這里插入圖片描述

直接編譯運(yùn)行: 成功,如下圖:

在這里插入圖片描述

方案二:

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

在這里插入圖片描述

這樣提升后,我們編譯試試: 報(bào)錯(cuò),看提示應(yīng)該是沒(méi)找到這個(gè)類.

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

相關(guān)文章

  • C語(yǔ)言繪制雷達(dá)圖的示例代碼

    C語(yǔ)言繪制雷達(dá)圖的示例代碼

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

    C++ Primer Plus詳解

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

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

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

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

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

    C語(yǔ)言實(shí)現(xiàn)24點(diǎn)游戲源代碼

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

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

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

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

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

    解析之C++的列表初始化語(yǔ)法

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

    VS報(bào)錯(cuò)C1189及MSB3721解決方法

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

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

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

最新評(píng)論

新昌县| 法库县| 科技| 任丘市| 泸定县| 大渡口区| 大丰市| 神木县| 龙陵县| 绥中县| 舟山市| 昌平区| 辽宁省| 兰考县| 聊城市| 宾阳县| 白玉县| 武威市| 巫山县| 普宁市| 彭山县| 碌曲县| 永顺县| 杂多县| 南宫市| 武安市| 张家界市| 湖南省| 马山县| 北碚区| 建瓯市| 中西区| 浮山县| 来凤县| 高安市| 紫金县| 绥中县| 寻甸| 阜平县| 三穗县| 淅川县|