亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年05月11日 09:54:46   作者:Foxalien  
使用QT提供的QChartView來(lái)繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫(xiě)的類(lèi),怎么才能確保提升后編譯不報(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提升到我們自己寫(xiě)的類(lèi),怎么才能確保提升后編譯不報(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è)類(lèi)型呢?
    • 疑問(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è)的話(huà),應(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)生成的,如果重新編譯的話(huà),我們的修改都被覆蓋掉了,我們難道再去修改? 顯然不是最佳方案.

注意到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í)候,類(lèi)寫(xiě)CtQChartView, 頭文件 qchartview.h 呢?
如下圖:

在這里插入圖片描述

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

在這里插入圖片描述

解決: 在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í)候,只寫(xiě)一個(gè)類(lèi),然后在mainwindow.h文件中include的這個(gè)類(lèi)的頭文件,是不是也可以呢?
如下圖:如果不填頭文件的話(huà),不讓添加.

在這里插入圖片描述

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

在這里插入圖片描述

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

  • 提升QGraphicsView 的類(lèi),只要在 ui_xxx.h 頭文件前引用就可以.
  • 在xxx.ui文件中提升QGraphicsView的時(shí)候,只要正確填寫(xiě)我們希望提升的類(lèi)名就可以了. 當(dāng)然頭文件也需要填寫(xiě)一個(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++實(shí)現(xiàn)LeetCode(22.生成括號(hào))

    C++實(shí)現(xiàn)LeetCode(22.生成括號(hào))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(22.生成括號(hào)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 解析C++引用

    解析C++引用

    引用是C++引入的新語(yǔ)言特性,是C++常用的一個(gè)重要內(nèi)容之一。在工作中發(fā)現(xiàn),許多人使用它僅僅是想當(dāng)然,在某些微妙的場(chǎng)合,很容易出錯(cuò),究其原由,大多因?yàn)闆](méi)有搞清本源。在本篇中將對(duì)引用進(jìn)行詳細(xì)討論,希望對(duì)大家更好地理解和使用引用起到拋磚引玉的作用
    2021-06-06
  • C語(yǔ)言18個(gè)必背經(jīng)典程序

    C語(yǔ)言18個(gè)必背經(jīng)典程序

    這篇文章主要分下工的是18個(gè)C語(yǔ)言必背的經(jīng)典程序,下面文章我們就來(lái)看看實(shí)例,需要的小伙伴可以參考一下喲,希望對(duì)你有所幫助
    2021-10-10
  • C語(yǔ)言控制臺(tái)打磚塊小游戲

    C語(yǔ)言控制臺(tái)打磚塊小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言控制臺(tái)打磚塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++深入探究list的模擬實(shí)現(xiàn)

    C++深入探究list的模擬實(shí)現(xiàn)

    list相較于vector來(lái)說(shuō)會(huì)顯得復(fù)雜,它的好處是在任意位置插入,刪除都是一個(gè)O(1)的時(shí)間復(fù)雜度,本文主要介紹了C++中List的模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++ std::initializer_list 實(shí)現(xiàn)原理解析及遇到問(wèn)題

    C++ std::initializer_list 實(shí)現(xiàn)原理解析及遇到問(wèn)題

    這篇文章主要介紹了C++ std::initializer_list 實(shí)現(xiàn)原理勘誤,本文通過(guò)源碼解析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C++可調(diào)用對(duì)象callable object深入分析

    C++可調(diào)用對(duì)象callable object深入分析

    所謂的callable object,表示可以被某種方式調(diào)用其某些函數(shù)的對(duì)象。它可以是:一個(gè)函數(shù)、一個(gè)指向成員函數(shù)的指針、一個(gè)函數(shù)對(duì)象,該對(duì)象擁有operator()、一個(gè)lambda表達(dá)式,嚴(yán)格的說(shuō)它是一種函數(shù)對(duì)象
    2022-08-08
  • C++帶有指針成員的類(lèi)處理方式詳解

    C++帶有指針成員的類(lèi)處理方式詳解

    這篇文章主要為大家詳細(xì)介紹了C++帶有指針成員的類(lèi)處理方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋

    C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋

    這篇文章主要為大家詳細(xì)介紹了C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋,包括數(shù)據(jù)結(jié)構(gòu)和對(duì)象設(shè)計(jì)及主函數(shù)調(diào)用實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C++索引越界的解決方法

    C++索引越界的解決方法

    本文主要介紹了C++索引越界的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論