QT项目-Chart Themes Example学习(一)
1.main.cpp
- #include "themewidget.h"
- #include <QtWidgets/QApplication>
- #include <QtWidgets/QMainWindow>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QMainWindow window;
- ThemeWidget *widget = new ThemeWidget();
- window.setCentralWidget(widget);
- window.resize(900, 600);
- window.show();
- return a.exec();
- }
- 关于window.setCentralWidget(widget);
QT帮助:
- void QMainWindow::setCentralWidget(QWidget *widget)
- //将给定的小部件设置为主窗口的中央小部件
- Sets the given widget to be the main window's central widget.
//注意:QMainWindow拥有窗口小部件指针的所有权,并在适当的时间将其删除。另请参见centralWidget()。
- Note: QMainWindow takes ownership of the widget pointer and deletes it at the appropriate time. See also centralWidget().
- QWidget *QMainWindow::centralWidget() const
- //返回主窗口的中央窗口小部件。如果尚未设置中央窗口小部件,则此函数返回零。
- Returns the central widget for the main window. This function returns zero if the central widget has not been set.
2.themewidget.h
- #ifndef THEMEWIDGET_H
- #define THEMEWIDGET_H
- #include <QtWidgets/QWidget>
- #include <QtCharts/QChartGlobal>
- QT_BEGIN_NAMESPACE
- class QComboBox;
- class QCheckBox;
- class Ui_ThemeWidgetForm;
- QT_END_NAMESPACE
- QT_CHARTS_BEGIN_NAMESPACE
- class QChartView;
- class QChart;
- QT_CHARTS_END_NAMESPACE
- typedef QPair<QPointF, QString> Data;
- typedef QList<Data> DataList;
- typedef QList<DataList> DataTable;
- QT_CHARTS_USE_NAMESPACE
- class ThemeWidget: public QWidget
- {
- Q_OBJECT
- public:
- explicit ThemeWidget(QWidget *parent = 0);
- ~ThemeWidget();
- private Q_SLOTS:
- void updateUI();
- private:
- DataTable generateRandomData(int listCount, int valueMax, int valueCount) const;
- void populateThemeBox();
- void populateAnimationBox();
- void populateLegendBox();
- void connectSignals();
- QChart *createAreaChart() const;
- QChart *createBarChart(int valueCount) const;
- QChart *createPieChart() const;
- QChart *createLineChart() const;
- QChart *createSplineChart() const;
- QChart *createScatterChart() const;
- private:
- int m_listCount;
- int m_valueMax;
- int m_valueCount;
- QList<QChartView *> m_charts;
- DataTable m_dataTable;
- Ui_ThemeWidgetForm *m_ui;
- };
- #endif /* THEMEWIDGET_H */
1)关于#ifnde XXX f#define XXX #endif
其作用是“防止头文件被重复引用。”
“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。
头文件被重复引用引起的后果:
有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?
答案:不是一定要加,但是不管怎样,用#ifnde xxx #define xxx #endif或者其他方式避免头文件重复包含,只有好处没有坏处。个人觉得培养一个好的编程习惯是学习编程的一个重要分支。
下面给一个#ifndef/#define/#endif的格式:
#ifndef A_H意思是"if not define a.h" 如果不存在a.h
接着的语句应该#define A_H 就引入a.h
最后一句应该写#endif 否则不需要引入
2)关于QT_BEGIN_NAMESPACE
对于QT_BEGIN_NAMESPACE宏的作用
QT_BEGIN_NAMESPACE其实就是个宏,以前Qt4是没有命令空间的,后来才加上的,编译Qt源码时会有选项,是否将这些类放到专用的Qt命令空间内,默认是没有的。这就出来问题了,为了统一,如果你的代码在默认没有Qt命令空间的SDK中编译,那你就不用在前面加上命令空间,反之则需要。
为了屏蔽上面这个差异,使得你的代码能在这两种情况下都进行编译,Qt就提供了QT_BEGIN_NAMESPACE宏,这样开发者就省的自己来用程序或宏进行处理了。
补充:关于namespace
假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。
同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。
因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。
我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
关于QT_CHARTS_BEGIN_NAMESPACE同理。
QT项目-Chart Themes Example学习(一)的更多相关文章
- 开源项目Material Calendar View 学习记录 (一)
开源项目Material Calendar View 学习记录 Github: https://github.com/prolificinteractive/material-calendarview ...
- paip.c++ qt 项目工程互相引用的方法
paip.c++ qt 项目工程互相引用的方法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- Hello World程序演示Qt项目的建立、编译、运行和发布
一.Qt项目的建立 1.选择项目模板. 选择"文件-->新建文件或工程",在选择模板页面选择Qt C++项目中的"Qt Gui应用"一项,然后单击&quo ...
- 使用VisualStudio2015开发QT项目
一直习惯用VS,做QT项目时,不停的来回切IDE有些不方便.研究了一下QT的编译. 实际QT编译的机制和cmake是相同的,QT的IDE使用pro文件进行项目管理.QMake通过解析pro工程文件,生 ...
- 创建Qt项目
创建Qt项目 1 创建Qt项目 2.1 使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对 ...
- 封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)
单独封装QtCore 一直以来使用QT的特性使用惯了,很多东西QT都封装得很好.如果突然有一天,不使用QT开发了,是不是不习惯. 比如我们经常使用QString很多方法,string,wstring之 ...
- 用CMake 构建Qt 项目
译:用CMake构建Qt项目作者: Johan Thelin 译者:赖敬文原链接:http://developer.qt.nokia.com/quarterly/view/using_cmake_t ...
- 我写了个项目,帮你学习HTTP接口测试!
端午节我写了一个项目,帮助你学习HTTP接口测试. GitHub地址: https://github.com/defnngj/learning-API-test 整个项目基于Flask和 Reques ...
随机推荐
- flutter & dart & vs code & bug
flutter & dart & vs code & bug Waiting for another flutter command to release the startu ...
- taro table component
taro table component https://juejin.im/post/5d901696f265da5b926bbcaa https://taro-ext.jd.com/search? ...
- 远程过程调用框架——gRPC
gRPC是一款基于http协议的远程过程调用(RPC)框架.出自google.这个框架可以用来相对简单的完成如跨进程service这样的需求开发. 资料参考: https://blog.csdn.ne ...
- 教你吃透CSS的盒子模型(Box Model)
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
- java: 类 RegisterController 是公共的, 应在名为 RegisterController.java 的文
public声明的类名需要和文件名一致,检查一下
- MySQL应用优化
MySQL应用优化 目录 MySQL应用优化 1.数据库连接池 2.减少对MySQL的访问 3.负载均衡 4.MySQL查询缓存优化 5.MySQL如何使用缓存 6.MySQL内存管理以及优化 原则 ...
- FTPClient类的API
org.apache.commons.NET.ftp Class FTPClient类FTPClient java.lang.Object java.lang.Object继承 org.apache. ...
- 用友U8+V12.0安装教程(有需要软件和服务的可以联系我)
有需要用友U8+V12.0软件和服务的可以联系我 QQ:751824677 1.退出所有杀毒软件 2.先装服务器SQL2008 3.服务器(会计): 经典应用模式--全产品 (解压A盘-执行-Aut ...
- Markdown的基本用法与下载
Markdown的基本用法与下载typora 下载typora 1.在浏览器搜索typora 2.然后点进去 3.往下翻点击Download 4.看自己是什么系统然后在选择 5.选好系统以后再去去选择 ...
- Java文件字节流
//输出和输入流 package com.kangkang.IO; import com.sun.xml.internal.ws.util.xml.CDATA; import java.io.File ...