博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT构建窗体(父窗体传为野指针)异常案例
阅读量:4624 次
发布时间:2019-06-09

本文共 2373 字,大约阅读时间需要 7 分钟。

【1】源码

工作中,时常会遇到各种各样的异常场景,有些异常场景很常见,必要备录,以防再犯。

分享本案例为:QT创建窗体时parent父窗体传野指针引起异常。

本案例源码如下:

1.1 默认新建一个QT工程(ps:本地QT版本为5.3)

(1)工程目录结构

(2)工程pro文件

1 QT       += core gui 2  3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4  5 TARGET = CustomComboBox 6 TEMPLATE = app 7  8  9 SOURCES += main.cpp\10         mainwindow.cpp \11     customcombobox.cpp12 13 HEADERS  += mainwindow.h \14     customcombobox.h15 16 FORMS    += mainwindow.ui

1.2 实现自定义控件

(1)customcombobox.h

1 #ifndef CUSTOMCOMBOBOX_H 2 #define CUSTOMCOMBOBOX_H 3  4 #include 
5 6 class CustomComboBox : public QComboBox 7 { 8 public: 9 CustomComboBox(QWidget* parent = NULL);10 };11 12 #endif // CUSTOMCOMBOBOX_H

(2)customcombobox.cpp

1 #include "customcombobox.h"2 3 CustomComboBox::CustomComboBox(QWidget *parent)4     : QComboBox(parent)5 {6 }

1.3 利用自定义控件

(1)mainwindow.h

1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3  4 #include 
5 #include
6 #include "customcombobox.h" 7 8 namespace Ui 9 {10 class MainWindow;11 }12 13 class MainWindow : public QMainWindow14 {15 Q_OBJECT16 17 public:18 explicit MainWindow(QWidget *parent = 0);19 ~MainWindow();20 21 private:22 void init();23 24 private:25 QFrame *m_pFrame;26 Ui::MainWindow *m_pUI;27 CustomComboBox *m_pComboBox;28 };29 30 #endif // MAINWINDOW_H

(2)mainwindow.cpp

1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3  4 MainWindow::MainWindow(QWidget *parent) 5     : QMainWindow(parent) 6     , m_pUI(new Ui::MainWindow) 7 { 8     m_pUI->setupUi(this); 9     init();10 }11 12 MainWindow::~MainWindow()13 {14     delete m_pUI;15 }16 17 void MainWindow::init()18 {19     // TODO ....实际应用复杂20     m_pComboBox = new CustomComboBox(m_pFrame);21     // TODO ....22 }

1.4 main函数

(1)main.cpp

1 #include "mainwindow.h" 2 #include 
3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 MainWindow w; 8 w.show(); 9 10 return a.exec();11 }

【2】分析

2.1 崩溃堆栈

调试代码,异常堆栈是梳理问题的关键:由堆栈可定位发生问题的过程(即函数)。

2.2 局部对象

查看局部对象值,便于更具体的定位问题:由局部对象值可定位发生问题的对象(即成员变量)。

2.3 源码剖析(ps: 本地QT版本5.3,不同的QT版本,源码异常位置可能不同!)

QT源码分析(关于QT源码调试,参见随笔《》),更具体查纠问题点:由源码可“知其然,更知其所以然”(即异常根本原因)

2.4 复原异常现场

结合以上所有的过程,弄清楚异常的来龙去脉。

【3】总结

切记,类中定义的指针成员变量,务必使用初始化列表规范进行强制初始化(默认置为NULL)。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

 

转载于:https://www.cnblogs.com/Braveliu/p/8577100.html

你可能感兴趣的文章
当期页面导出按钮失灵问题
查看>>
Spark学习(三) -- SparkContext初始化
查看>>
mysql zip 版安装
查看>>
python之datetime类
查看>>
Mouse Properties(鼠标属性)
查看>>
IOS ——OC—— NSNull的用法简单总结
查看>>
林子祥
查看>>
Fast-RCNN
查看>>
Linux教程:如何在CentOS或者RHEL上启用Nux Dextop仓库
查看>>
Mac SVN 命令行
查看>>
CentOS6.4 中文输入法
查看>>
bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
查看>>
makefile高级用法
查看>>
C#编写好的windows服务,在本机上运行很好,考到其他电脑运行出现“错误1053: 服务没有及时响应启动或控制请求”的解决办法...
查看>>
C/C++---printf/cout 从右至左压栈顺序实例详解
查看>>
hadoop hadoop install (1)
查看>>
synchronized 原理分析
查看>>
评价指标的计算:accuracy、precision、recall、F1-score等
查看>>
超棒的视差滚动效果javascript类库 - Jarallax
查看>>
一款纯css实现的垂直时间线效果
查看>>