用C++写一个比python的print还方便的函数,支持任意数据类型。

程序例子:


int main(int argc, char* argv[])
{
	QApplication a(argc, argv);  //注意,这里是QApplication

	ga.setStdLocaleForUTF8();



	_pn(1);
	_pn(int(5));
	_pn(double(3.1415926));
	_pn(QColor());
	_pn(_string("中"));
	_pn(std::string("华"));
	_pn(std::wstring(_t("人")));
	_pn(QString("们"));
	_pn(_StrA("共"));
	_pn("和");
	_pn(_t("国"));
	_pn(QByteArray("123中文"));
	_pn(QByteArray("123中文").data());
	_pn(QWidget());
	 

    return a.exec();
}


 

输出结果:

_pn会把它暂时无法打印的内容输出它的类型名,例如:

_StrA

QWidget

关键代码:

/// <summary>
/// 在屏幕上显示内容
/// </summary>
/// <param name="pt"></param>
/// <param name="sTypeName"></param>
/// 创建时间:2025-02-16    最后一次修改时间:2025-02-16
void _p(void* pt, const char* sTypeName);


/// <summary>
/// 在屏幕上显示内容
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// 创建时间: 2025-02-05  最后一次修改时间:2025-02-05
template<class T>
inline void _p(const T& t) {
	_p((void*) (&t), typeid(t).name());
}


#define _pn(var) (_cout <<_t(#var)<<_t("="));_p(var);

在_p的实现中,所有内容都由_tostr函数完成,注意,像

这样的显示函数性能慢它几万倍也没关系,不要说十几倍。

_string  _tostr(void* pt, const char* sTypeName)
{
	_StrA  sType = sTypeName;
	_string sResult(_t(""), 100);
	 
	if (sType == typeid(char*).name() || sType == typeid(const char*).name()) {
		char** ppC = ((char**)(pt)); //指向指针的指针
		sResult.add(_string::qt_fromUtf8(*ppC));
	}
	else if (sType == typeid(wchar_t*).name() || sType == typeid(const wchar_t*).name()) {
		wchar_t** ppC = ((wchar_t**)(pt)); //指向指针的指针
		sResult.add(*ppC);
	}
#ifdef _QT_  //---------------------------------------------------------_QT_	 
	else if (sType == typeid(QStringList).name()) {

		QStringList* data = (QStringList*)pt;


		if (data->size() == 0)
			sResult.add(_t("{}"));
		else {
			sResult.add(_t("{"));
			for (int i = 0; i < data->size() - 1; ++i) {
				sResult.add(_t("\""));
				sResult.add(data->at(i).toStdWString());
				sResult.add(_t("\","));
			}
			sResult.add(_t("\""));
			sResult.add(data->last().toStdWString());
			sResult.add(_t("\""));

			sResult.add(_t("}"));
		}
	}
	else if (sType == typeid(QString).name()) {
		sResult.add(_t("\""));
		sResult.add((*((QString*)(pt))).toStdWString());
		sResult.add(_t("\""));
	}
	else if (sType == typeid(QDateTime).name()) {
		return QtDateTimeToString((QDateTime*)pt);
	}
	else if (sType == typeid(QFont).name()) {
		QFont* pf = (QFont*)(pt);
		sResult.add(pf->toString().toStdWString());
	}
	else if (sType == typeid(QByteArray).name()) {
		QByteArray* pb = (QByteArray*)(pt);
		sResult.add(_string::fromOnlyData(pb->data(), pb->size()));
	}
	else if (sType == typeid(QColor).name()) {
		QColor* pc = (QColor*)(pt);
		//sResult.add(_string::fromOnlyData(pb->data(), pb->size()));
		/*
		alpha:透明度。

		red:红色分量。

		green:绿色分量。

		blue:蓝色分量。

		pad:填充字段。
		*/
		_Color c;
		c._a = pc->alpha();
		c._r = pc->red();
		c._g = pc->green();
		c._b = pc->blue();

		sResult.add(c.toString());
	}
#endif // ---------------------------------------------------------_QT_	 
	else if (sType == typeid(_StrListW).name()) {

		_StrListW* data = (_StrListW*)pt;

		if (data->size() == 0)
			sResult.add(_t("{}"));
		else {
			sResult.add(_t("{"));
			for (int i = 0; i < data->size() - 1; ++i) {
				sResult.add(_t("\""));
				sResult.add(data->at(i).qt_toStdWString());
				sResult.add(_t("\","));
			}

			sResult.add(_t("\""));
			sResult.add(data->last()->data.qt_toStdWString());
			sResult.add(_t("\""));
			sResult.add(_t("}"));
		}
	}
	else if (sType == typeid(int).name()) {
		int *pNum = ((int*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(float).name()) {
		float* pNum = ((float*)(pt));
		sResult.add(_Math::doubleToStr(*pNum));
	}
	else if (sType == typeid(double).name()) {
		double *pNum = ((double*)(pt));
		sResult.add(_Math::doubleToStr(*pNum));
	}
	else if (sType == typeid(__int64).name()) {
		__int64 *pNum = ((__int64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_byte).name()) {
		_byte *pNum = ((_byte*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int8).name()) {
		_int8 *pNum = ((_int8*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int16).name()) {
		_int16 *pNum = ((_int16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int32).name()) {
		_int16 *pNum = ((_int16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int64).name()) {
		_int64 *pNum = ((_int64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint8).name()) {
		_uint8 *pNum = ((_uint8*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint16).name()) {
		_uint16 *pNum = ((_uint16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint32).name()) {
		_uint32 *pNum = ((_uint32*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint64).name()) {
		_uint64* pNum = ((_uint64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(std::string).name()) {
		std::string* ps = ((std::string*)(pt));
		sResult.add(_string::qt_fromStdString(*ps));
	}
	else if (sType == typeid(std::wstring).name()) {
		std::wstring* ps = ((std::wstring*)(pt));
		sResult.add(_string::qt_fromStdWString(*ps));
	}
	else if (sType == typeid(_string).name()) {
		_string* ps = ((_string*)(pt));
		sResult.add(*ps);
	}
	else if (sType.indexOf("char const [") != -1) {//char const [9]
		const char* ps = (char*)(pt);
		sResult.add(_string::qt_fromUtf8(ps));
	}
	else if (sType.indexOf("wchar_t const [") != -1) {//char const [9]
		const wchar_t* ps = (wchar_t*)(pt);
		sResult.add(ps);
	}
	else if (sType == typeid(bool).name()) {
		bool* pb = (bool*)(pt);

		if (*pb)
			sResult.add(_t("true"));
		else
			sResult.add(_t("false"));
	}
	else {
		sResult.add(sType);
	}
	return sResult;
}

以下是完整源码:

_p.h

/*********************************************************************
文件名						: _p.h

功能							: 类似于Python的print

作者							: 李锋

手机							: 13828778863

Email						: ruizhilf@139.com

创建时间						: 2024年09月20日

最后一次修改时间				:  2025年02月22日


*********************************************************************/
#pragma once


#include "_Macro.h"



_LF_BEGIN_

class _Font;
class _Color;
class _StrW;

_LF_END_
 



/// <summary>
/// 
/// </summary>
/// <param name="pt"></param>
/// <param name="sTypeName"></param>
/// <returns></returns>
/// 创建时间:2025-02-16    最后一次修改时间:2025-02-16
_string _tostr(void* pt, const char* sTypeName);

/// <summary>
/// 
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
/// 创建时间:2025-02-16    最后一次修改时间:2025-02-16
template<class T>
inline _string _tostr(const T& t) {
	return _tostr((void*)(&t), typeid(t).name());
}



/

/// <summary>
/// 在屏幕上显示内容
/// </summary>
/// <param name="pt"></param>
/// <param name="sTypeName"></param>
/// 创建时间:2025-02-16    最后一次修改时间:2025-02-16
void _p(void* pt, const char* sTypeName);


/// <summary>
/// 在屏幕上显示内容
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// 创建时间: 2025-02-05  最后一次修改时间:2025-02-05
template<class T>
inline void _p(const T& t) {
	_p((void*) (&t), typeid(t).name());
}


#define _pn(var) (_cout <<_t(#var)<<_t("="));_p(var);
 

/

/// <summary>
/// 显示机器的二进制码
/// </summary>
/// <param name="pt"></param>
/// <param name="nSize"></param>
/// 创建时间:2025-02-16    最后一次修改时间:2025-02-16
void _pb(void* pt, const size_t& nSize);

/// <summary>
/// 显示机器的二进制码
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// 创建时间:2015-01-01    最后一次修改时间:2025-02-16
template<class T>
inline void _pb(const T& t) {
	_pb((void*)(&t), sizeof(t));
}


//显示机器的二进制码
#define _pnb(var) (_cout <<_t(#var)<<_t("="));_pb(var);


/

				//在窗体上显示内容

/

/// <summary>
/// 在窗体上显示内容
/// </summary>
/// <param name="pt"></param>
/// <param name="sTypeName"></param>
/// 创建时间:2015-02-16    最后一次修改时间:2015-02-16
void _ps(void* pt, const char* sTypeName, const lf::_Font& f, const lf::_Color& c);


/// <summary>
/// 
/// </summary>
/// <param name="pt"></param>
/// <param name="sTypeName"></param>
/// <param name="sqml"></param>
/// 创建时间:2015-02-16    最后一次修改时间:2015-02-16
void _ps(void* pt, const char* sTypeName, const _string& sqml);


/// <summary>
/// 在窗体上显示内容
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// 创建时间:2015-02-16    最后一次修改时间:2015-02-16
template<class T>
inline void _ps(const T& t, const lf::_Font& f = lf::_Font("宋体",18), const lf::_Color &c = lf::_Color::Red){
	_ps((void*)(&t), typeid(t).name(),f,c);
}

 

/// <summary>
/// 在窗体上显示内容
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// 创建时间:2015-02-16    最后一次修改时间:2015-02-16
template<class T>
inline void _ps(const T& t,const _string sqml) {
	_ps((void*)(&t), typeid(t).name(), sqml);
}


_p.cpp


//#undef _QT_


#include "_p.h"
#include "global_c_all.h"

#ifdef _QT_  _QT_


#include <QApplication>
#include <QWidget>
#include <QMouseEvent>
#include <QDebug>
#include <qdatetime>
#include <qdialog.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qpainter>
#include <qtextedit>
#include <qcolor>
/
#include "my_QWidget.h"

/*
在Qt中,Q_OBJECT宏通常需要放在头文件中。

Q_OBJECT宏用于为类声明扩展的Qt功能,包括信号、槽以及元对象特性等。它的主要作用是为类

与Qt元对象编译器(Meta - Object Compiler,MOC)协同工作提供支持,使类能够使用Qt的信

号槽机制、动态类型信息和动态属性等功能。

如果将Q_OBJECT宏放在源文件(cpp文件)中,MOC可能无法正确处理该类的元对象相关信息,导致

编译错误或运行时出现异常。因为MOC主要处理头文件中的类声明,以确保正确地生成与类相关的元

对象代码。

综上所述,为了确保Qt的元对象系统正常工作,Q_OBJECT宏应放置在头文件中。
*/

#endif   _QT_

 

//

using namespace lf;

//


/*
void _p(const bool& ItemValue) { 
	if (ItemValue)
		std::cout << "True" << "\n";
	else
		std::cout << "False" << "\n";
}

void _p(const int& ItemValue){ std::cout << ItemValue << "\n"; } 
void _p(const long& ItemValue) { std::cout << ItemValue << "\n"; }
void _p(const size_t& ItemValue) { std::cout << ItemValue << "\n"; }
void _p(const __int64& ItemValue) { std::cout << ItemValue << "\n"; }
void _p(const double& ItemValue){ std::cout << ItemValue << "\n"; }

void _p(const char& ItemValue) { std::cout << "\'" << ItemValue << "\'\n"; } 
void _p(const char* ItemValue) { std::cout << "\"" << ItemValue << "\"\n"; }
void _p(char* ItemValue) { std::cout << "\"" << ItemValue << "\"\n"; }

void _p(const wchar_t& ItemValue) { std::wcout << _t("\'") << ItemValue << _t("\'\n"); } 
void _p(const wchar_t* ItemValue) { std::wcout << _t("\"") << ItemValue << _t("\"\n"); }
void _p(wchar_t* ItemValue) { std::wcout << _t("\"") << ItemValue << _t("\"\n"); }

void _p(const std::string& ItemValue) { std::cout << "\"" << ItemValue << "\"\n"; }
void _p(const std::wstring& ItemValue) { std::wcout << _t("\"") << ItemValue << _t("\"\n"); }
void _p(const lf::_StrA& ItemValue) { std::cout << "\"" << ItemValue << "\"\n"; }
void _p(const lf::_StrW& ItemValue) { std::wcout << _t("\"") << ItemValue << _t("\"\n"); }


/// <summary>
/// 
/// </summary>
/// <param name="ItemValue"></param>
/// 创建时间: 2025-02-15  最后一次修改时间:2025-02-15
void _p(const _StringList& ItemValue){
	if (ItemValue.size() == 0)
		std::wcout << _t("{}");
	else {
		std::wcout << _t("{");
		for (int i = 0; i < ItemValue.size() - 1; ++i) {
			std::wcout << _t("\"") << ItemValue[i].qt_toStdWString() << _t("\",");
		}

		std::wcout << _t("\"") << ItemValue[ItemValue.size() - 1].qt_toStdWString() << _t("\"");

		std::wcout << _t("}\n");
	}
}

void _p(const lf::_Array<lf::_Str<wchar_t>>& ItemValue)
{
	if (ItemValue.size() == 0)
		std::wcout << _t("{}");
	else {
		std::wcout << _t("{");
		for (int i = 0; i < ItemValue.size() - 1; ++i) {
			std::wcout << _t("\"") << ItemValue[i] << _t("\",");
		}

		std::wcout << _t("\"") << ItemValue[ItemValue.size() - 1] << _t("\"");

		std::wcout << _t("}\n");
	}
}

void _p(const lf::_ByteArray& ItemValue)
{
	std::cout << (char*)ItemValue.dataPointer() << "\n";
}

 
 

void _p(const std::vector<int>& item) {
	std::cout << "{";
	size_t n = 0;
	for (const int& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}
	std::cout << "}\n";
}


void _p(const std::vector<float>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const float& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}


void _p(const std::vector<double>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const double& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}



void _p(const std::vector<std::string>& item) {
	std::cout << "{";

	size_t n = 0;
	for (const std::string& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << "\"" << value << "\"" << ",";
		}else {
			std::cout << "\"" << value << "\"";
		}
	}

	std::cout << "}\n";
}


void _p(const std::vector<std::wstring>& item) {
	std::wcout << "{";

	size_t n = 0;
	for (const std::wstring& value : item) {
		++n;
		if (n != item.size()) {

			std::wcout << _t("\"") << value << _t("\"") << _t(",");
		}else {

			std::wcout << _t("\"") << value << _t("\"");
		}
	}

	std::wcout << _t("}\n");

}



void _p(const std::list<int>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const int& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}

void _p(const std::list<float>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const float& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}

void _p(const std::list<double>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const double& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}



void _p(const std::list<std::string>& item) {
	std::cout << "{";

	size_t n = 0;
	for (const std::string& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << "\"" << value << "\"" << ",";
		}else {
			std::cout << "\"" << value << "\"";
		}
	}

	std::cout << "}\n";
}


void _p(const std::list<std::wstring>& item) {
	std::wcout << "{";

	size_t n = 0;
	for (const std::wstring& value : item) {
		++n;
		if (n != item.size()) {

			std::wcout << _t("\"") << value << _t("\"") << _t(",");
		}else {
			std::wcout << _t("\"") << value << _t("\"");
		}
	}

	std::cout << "}\n";
}
 
void _p(const lf::_DList<std::string>& item)
{
	std::cout << "{";

	size_t n = 0;
	for (const std::string& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << "\"" << value << "\"" << ",";
		}
		else {
			std::cout << "\"" << value << "\"";
		}
	}

	std::cout << "}\n";
}
 

void _p(const lf::_DList<int>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const int& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << value << ",";
		}
		else {
			std::cout << value;
		}
	}

	std::cout << "}\n";

}

 
void _p(const lf::_DList<char>& item) {

	std::cout << "{";

	size_t n = 0;
	for (const char& value : item) {
		++n;
		if (n != item.size()) {

			std::cout << '\'' << value << "\',";
		}
		else {
			std::cout << '\'' << value << "\'";
		}
	}

	std::cout << "}\n";

}

void _p(const lf::_DList<wchar_t>& item) {

	std::wcout << _t("{");

	size_t n = 0;
	for (const wchar_t& value : item) {
		++n;
		if (n != item.size()) {

			std::wcout << _t('\'') << value << _t("\',");
		}
		else {
			std::wcout << _t('\'') << value << _t("\'");
		}
	}

	std::wcout << _t("}\n");

}
*/

/

#ifdef _QT_

/// <summary>
/// 
/// </summary>
/// <param name="pt"></param>
/// <returns></returns>
/// 创建时间: 2025-02-16  最后一次修改时间:2025-02-16
_string QtDateTimeToString(QDateTime* pt) {
	_string sResult(_t(""), 30);

	sResult.add(_Math::intToStr(pt->date().year(), 4));
	sResult.add(_t("/"));
	sResult.add(_Math::intToStr(pt->date().month(), 2));
	sResult.add(_t("/"));
	sResult.add(_Math::intToStr(pt->date().day(), 2));
	sResult.add(_t(" "));
	sResult.add(_Math::intToStr(pt->time().hour(), 2));
	sResult.add(_t(":"));
	sResult.add(_Math::intToStr(pt->time().minute(), 2));
	sResult.add(_t(":"));
	sResult.add(_Math::intToStr(pt->time().second(), 2));
	return sResult;
}





/// <summary>
/// 
/// </summary>
/// 创建时间: 2025-02-16  最后一次修改时间:2025-02-16
class DialogMessage : public QDialog {

public:
	DialogMessage(QWidget* parent = nullptr) : QDialog(parent) {}

};







/// <summary>
/// 
/// </summary>
/// 创建时间: 2025-02-16  最后一次修改时间:2025-02-16
class WidgetMessage : public my_QWidget {
public:
	WidgetMessage(QWidget* parent = nullptr) : my_QWidget(parent) {}

protected:
	void mousePressEvent(QMouseEvent* event) override {
		if (event->button() == Qt::LeftButton) {
			// 创建对话框
			DialogMessage* dialog = new DialogMessage(this);
			dialog->setWindowTitle("Dialog");
			QLabel* label = new QLabel("You clicked the left mouse button!", dialog);
			QVBoxLayout* layout = new QVBoxLayout(dialog);
			layout->addWidget(label);
			dialog->setLayout(layout);

			// 显示对话框
			dialog->exec();
		}
	}

	void paintEvent(QPaintEvent* event) override
	{
		Q_UNUSED(event);

		QPainter painter(this);

		// 设置字体
		QFont font("Arial", 20);
		painter.setFont(font);

		// 绘制红色文本
		painter.setPen(Qt::red);
		painter.drawText(10, 50, "红色文本");

		// 绘制蓝色文本
		painter.setPen(Qt::blue);
		painter.drawText(10, 100, "蓝色文本");
	}
};







#endif

_string  _tostr(void* pt, const char* sTypeName)
{
	_StrA  sType = sTypeName;
	_string sResult(_t(""), 100);
	 
	if (sType == typeid(char*).name() || sType == typeid(const char*).name()) {
		char** ppC = ((char**)(pt)); //指向指针的指针
		sResult.add(_string::qt_fromUtf8(*ppC));
	}
	else if (sType == typeid(wchar_t*).name() || sType == typeid(const wchar_t*).name()) {
		wchar_t** ppC = ((wchar_t**)(pt)); //指向指针的指针
		sResult.add(*ppC);
	}
#ifdef _QT_  //---------------------------------------------------------_QT_	 
	else if (sType == typeid(QStringList).name()) {

		QStringList* data = (QStringList*)pt;


		if (data->size() == 0)
			sResult.add(_t("{}"));
		else {
			sResult.add(_t("{"));
			for (int i = 0; i < data->size() - 1; ++i) {
				sResult.add(_t("\""));
				sResult.add(data->at(i).toStdWString());
				sResult.add(_t("\","));
			}
			sResult.add(_t("\""));
			sResult.add(data->last().toStdWString());
			sResult.add(_t("\""));

			sResult.add(_t("}"));
		}
	}
	else if (sType == typeid(QString).name()) {
		sResult.add(_t("\""));
		sResult.add((*((QString*)(pt))).toStdWString());
		sResult.add(_t("\""));
	}
	else if (sType == typeid(QDateTime).name()) {
		return QtDateTimeToString((QDateTime*)pt);
	}
	else if (sType == typeid(QFont).name()) {
		QFont* pf = (QFont*)(pt);
		sResult.add(pf->toString().toStdWString());
	}
	else if (sType == typeid(QByteArray).name()) {
		QByteArray* pb = (QByteArray*)(pt);
		sResult.add(_string::fromOnlyData(pb->data(), pb->size()));
	}
	else if (sType == typeid(QColor).name()) {
		QColor* pc = (QColor*)(pt);
		//sResult.add(_string::fromOnlyData(pb->data(), pb->size()));
		/*
		alpha:透明度。

		red:红色分量。

		green:绿色分量。

		blue:蓝色分量。

		pad:填充字段。
		*/
		_Color c;
		c._a = pc->alpha();
		c._r = pc->red();
		c._g = pc->green();
		c._b = pc->blue();

		sResult.add(c.toString());
	}
#endif // ---------------------------------------------------------_QT_	 
	else if (sType == typeid(_StrListW).name()) {

		_StrListW* data = (_StrListW*)pt;

		if (data->size() == 0)
			sResult.add(_t("{}"));
		else {
			sResult.add(_t("{"));
			for (int i = 0; i < data->size() - 1; ++i) {
				sResult.add(_t("\""));
				sResult.add(data->at(i).qt_toStdWString());
				sResult.add(_t("\","));
			}

			sResult.add(_t("\""));
			sResult.add(data->last()->data.qt_toStdWString());
			sResult.add(_t("\""));
			sResult.add(_t("}"));
		}
	}
	else if (sType == typeid(int).name()) {
		int *pNum = ((int*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(float).name()) {
		float* pNum = ((float*)(pt));
		sResult.add(_Math::doubleToStr(*pNum));
	}
	else if (sType == typeid(double).name()) {
		double *pNum = ((double*)(pt));
		sResult.add(_Math::doubleToStr(*pNum));
	}
	else if (sType == typeid(__int64).name()) {
		__int64 *pNum = ((__int64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_byte).name()) {
		_byte *pNum = ((_byte*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int8).name()) {
		_int8 *pNum = ((_int8*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int16).name()) {
		_int16 *pNum = ((_int16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int32).name()) {
		_int16 *pNum = ((_int16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_int64).name()) {
		_int64 *pNum = ((_int64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint8).name()) {
		_uint8 *pNum = ((_uint8*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint16).name()) {
		_uint16 *pNum = ((_uint16*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint32).name()) {
		_uint32 *pNum = ((_uint32*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(_uint64).name()) {
		_uint64* pNum = ((_uint64*)(pt));
		sResult.add(_Math::intToStr(*pNum));
	}
	else if (sType == typeid(std::string).name()) {
		std::string* ps = ((std::string*)(pt));
		sResult.add(_string::qt_fromStdString(*ps));
	}
	else if (sType == typeid(std::wstring).name()) {
		std::wstring* ps = ((std::wstring*)(pt));
		sResult.add(_string::qt_fromStdWString(*ps));
	}
	else if (sType == typeid(_string).name()) {
		_string* ps = ((_string*)(pt));
		sResult.add(*ps);
	}
	else if (sType.indexOf("char const [") != -1) {//char const [9]
		const char* ps = (char*)(pt);
		sResult.add(_string::qt_fromUtf8(ps));
	}
	else if (sType.indexOf("wchar_t const [") != -1) {//char const [9]
		const wchar_t* ps = (wchar_t*)(pt);
		sResult.add(ps);
	}
	else if (sType == typeid(bool).name()) {
		bool* pb = (bool*)(pt);

		if (*pb)
			sResult.add(_t("true"));
		else
			sResult.add(_t("false"));
	}
	else {
		sResult.add(sType);
	}
	return sResult;
}

void _p(void* pt, const char* sTypeName)
{ 
	std::wcout << _tostr(pt, sTypeName).c_str() << "\n";

}


/


void _pb(void* pt, const size_t& nSize)
{
	_cout << lf::_Bit((_byte*)(pt), nSize).GetMachineCode(true) << _t("\n");
}

 
void _ps(void* pt, const char* sTypeName, const lf::_Font& f, const lf::_Color& c)
{

#ifdef _QT_
	_string sText = _tostr(pt, sTypeName);

	WidgetMessage* w = new WidgetMessage();
 
	QTextEdit* pte = new QTextEdit(sText,w);
	pte->setObjectName("pte");
	 
	pte->setFont(QFont(f.FamilyName, f.Size));
 
	pte->setStyleSheet(c.toStyleSheet_foregroundColor()); // 设置全局字体颜色为绿色
	    
	w->my_resizeEvent = [](QWidget* pw, QResizeEvent* e) {
		
		QTextEdit* pte = pw->findChild<QTextEdit*>("pte");

		if(pte != null)
			pte->resize(e->size().width(), e->size().height());	 

	};
 

	w->resize(400, 400);
	
	w->show();	
#endif
}

#ifdef _QT_
class EventFilter : public QObject {	
	//Q_OBJECT

protected:
	// 重写 eventFilter 函数
	bool eventFilter(QObject* obj, QEvent* event) override {
		if (event->type() == QEvent::MouseButtonPress) {
			QMouseEvent* mouseEvent = (QMouseEvent*)(event);
			if (mouseEvent->button() == Qt::LeftButton) {
				//qDebug() << "事件过滤器:左键按下,位置:" << mouseEvent->pos();
				ga.ShowInfo("ksdf");
			}
		}
		return QObject::eventFilter(obj, event); // 继续传递事件
	}
};

#endif


void _ps(void* pt, const char* sTypeName, const _string& sqml)
{
#ifdef _QT_
	 
	WidgetMessage* w = new WidgetMessage();
	w->setWindowTitle(sqml);
	w->resize(400, 800); 
	w->show();
	
#endif

}



/

				//在窗体上显示内容

/
void _ps(void* pt, const size_t& nSize)
{
}



/
 
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值