当前位置: 首页 > news >正文

简易的QT输出调试器2

我们升级一下调试器,让它变成单例模式,所有调试都打印在一个窗口上:

#pragma once
#ifndef _DEBUGWIDGET_H__
#define _DEBUGWIDGET_H__
#include <QWidget>
#include <qtextedit.h>
#include <qlayout.h>
class DebugWidget : public QWidget {
	Q_OBJECT

public:
	
	~DebugWidget();
	void addContents(const QString& s1);
	static DebugWidget* getDebugWidget();
	
	
private:
	QTextEdit *ShowDebugArea;
	QHBoxLayout *qlayout;
	DebugWidget(QWidget * parent = Q_NULLPTR);
	

};
extern DebugWidget *dw;

#endif

#include "debugwidget.hpp"
#include <iostream>
#include <vector>
#include <string>
#include <ostream>
#include <fstream>


using std::cout;
using std::cin;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::streambuf;
using std::string;
using std::vector;
static DebugWidget *dw = NULL;

DebugWidget::DebugWidget(QWidget * parent) : QWidget(parent) {
	
	setWindowFlags(Qt::WindowStaysOnTopHint);
	resize(1100,800);
	qlayout = new QHBoxLayout(this);
	ShowDebugArea = new QTextEdit(this);
	ShowDebugArea->setFontPointSize(20);
	qlayout->setAlignment(Qt::AlignCenter);
	qlayout->addWidget(ShowDebugArea);
	//ShowDebugArea->set
	setAttribute(Qt::WA_DeleteOnClose, true);
	show();
}

DebugWidget::~DebugWidget() {
}

void DebugWidget::addContents(const QString& s1)
{
	ShowDebugArea->append(s1);
}


DebugWidget* DebugWidget::getDebugWidget() {
	if(dw == NULL)
		dw = new DebugWidget;
	return dw;
}

    大部分内容和上一个调试器相同,只是在头文件中私有了构造函数,并在构造了静态的对象,在使用时初始化。

    注意一开始一定要用static DebugWidget *dw = NULL;,如果不等于NULL,则还没有进行初始化,初始值可能为任何值,这时候如果判断第一次是不是为NULL就会出错:

if(dw == NULL)
		dw = new DebugWidget;
	return dw;

    会直接返回没有任何实体对象的指针。

相关文章:

  • XML语言数据读写理解11
  • XML语言数据读写理解12
  • XML语言数据读写理解13
  • XML语言数据读写理解14
  • XML语言数据读写理解15
  • XML语言数据读写理解16
  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • QT图形显示和处理8
  • QT传输函数控件设计1 引子
  • [PHP内核探索]PHP中的哈希表
  • 【剑指offer】让抽象问题具体化
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android组件 - 收藏集 - 掘金
  • eclipse的离线汉化
  • ERLANG 网工修炼笔记 ---- UDP
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript学习总结——原型
  • Markdown 语法简单说明
  • MySQL-事务管理(基础)
  • Netty 4.1 源代码学习:线程模型
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Sublime text 3 3103 注册码
  • 如何在GitHub上创建个人博客
  • 小试R空间处理新库sf
  • 运行时添加log4j2的appender
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ionic异常记录
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 交换综合实验一
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • # Panda3d 碰撞检测系统介绍
  • # 飞书APP集成平台-数字化落地
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (145)光线追踪距离场柔和阴影
  • (23)Linux的软硬连接
  • (4)(4.6) Triducer
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (力扣)1314.矩阵区域和
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Net IE10 _doPostBack 未定义
  • .NET MVC之AOP
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net连接MySQL的方法