Qt 中 QVariant 使用总结

背景

QVariant 可以存储各种数据类型,包括 Qt 中所有内置类型、C++ 中所有基本数据类型,以及自定义类型。

构造函数

QVariant variant_bool(false);
QVariant variant_string(QString("hello"));
QVariant variant_double(3.14);
//...自定义类型支持直接构造

关键成员函数

①.type:获取当前保存的数据类型

QVariant variant;
qDebug() << variant.type();

variant.setValue(3.14);
qDebug() << variant.type();

在这里插入图片描述

②.value:获取保存到指定类型的值

QVariant variant(QString("hello"));
qDebug() << variant.value<QString>();

③.canConvert:判断能否将存储的类型转换为指定类型

QVariant variant(3.14);
qDebug() << variant.type();
qDebug() << variant.canConvert<QString>();

在这里插入图片描述

④.convert:将存储到类型转换为指定类型

QVariant variant(QString("hello"));
qDebug() << variant.type();

qDebug() << variant.convert(QVariant::Int);
qDebug() << variant;

在这里插入图片描述

⑤.isValid:判断是否存储有一个有效值

QVariant variant;
qDebug() << variant.isValid();

variant = QString("hello");
qDebug() << variant.isValid();

在这里插入图片描述

基本数据类型读取

①.数据保存

QVariant variant_int(12);

QVariant variant_string = QString("hello");

QVariant variant_bool;
variant_bool.setValue(false);

②.数据读取

QVariant variant_int(12);
QVariant variant_string = QString("hello");
QVariant variant_bool;
variant_bool.setValue(false);

qDebug() << variant_int.toInt();
qDebug() << variant_string.toString();
qDebug() << variant_bool.value<bool>();

在这里插入图片描述

自定义数据类型读取

①.注册为元类型

struct MyStruct
{
  int    id;
  QString name;
};
Q_DECLARE_METATYPE(MyStruct)
    
QVariant variant;
{
  MyStruct ms;
  ms.id = 1;
  ms.name = "hello";
  variant.setValue<MyStruct>(ms);
}

MyStruct ms = variant.value<MyStruct>();
qDebug() << ms.id << ms.name;

在这里插入图片描述

②.自定义类型转换

struct MyStruct
{
  int    id;
  QString name;

  MyStruct() = default;
  MyStruct(const QVariant & variant)
  {
    *this = variant.value<MyStruct>();
  }

  operator QVariant() const
{
    return QVariant::fromValue(*this);
  }
  
};
Q_DECLARE_METATYPE(MyStruct)
       
QVariant variant;
{
  MyStruct ms;
  ms.id = 1;
  ms.name = "hello";
    
  variant = ms;
}

MyStruct ms = variant;
qDebug() << ms.id << ms.name;

在这里插入图片描述

指针类型存取

MyStruct * ms = new MyStruct;
ms->id = 1;
ms->name = "hello";

QVariant variant = QVariant::fromValue(static_cast<void*>(ms));

MyStruct *  myStruct = static_cast<MyStruct*>(variant.value<void*>());
  
qDebug() << myStruct->id << myStruct->name;

在这里插入图片描述

QVariantMap

①.概述

在 QVariantMap 头文件中有如下定义:typedef QMap<QString,QVariant> QVariantMap,即 QVariantMap 是一个类型别名。

②.代码示例

QVariantMap config;
config["id"] = 10;
config["name"] = QString("hello");

qDebug() << config["id"].toInt();
qDebug() << config["name"].toString();

在这里插入图片描述

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt将LineEdit的内容存入Excel表,可以按照以下步骤进行: 1. 首先,我们需要创建一个Excel文件并打开它。可以使用QAxObject类来实现。首先,需要在.pro文件添加`QT += axcontainer`,然后在代码引入头文件`#include <QAxObject>`。 2. 在保存LineEdit内容的槽函数,创建一个QAxObject实例,并使用`setControl`函数设置控件类型为"Excel.Application"。 3. 打开Excel应用程序,可以使用`dynamicCall`方法调用Excel的`Workbooks`和`Add`函数来创建新的工作簿。 4. 获取工作簿的活动工作表,并使用动态调用`Range`函数定位单元格。通过`dynamicCall`可以调用Excel的各种功能,例如设置单元格的值、合并单元格、设置字体格式等。 5. 使用`dynamicCall`调用工作簿的`SaveAs`函数将Excel文件保存到指定路径。 6. 关闭Excel应用程序,释放资源。 下面是一个简单的示例代码: ```cpp #include <QAxObject> #include <QLineEdit> // 保存LineEdit内容到Excel void saveToExcel() { // 创建Excel对象 QAxObject* excel = new QAxObject("Excel.Application", 0); excel->dynamicCall("SetVisible(bool)", false); // 设置Excel程序不可见 // 打开新的工作簿 QAxObject* workbooks = excel->querySubObject("Workbooks"); QAxObject* workbook = workbooks->querySubObject("Add"); QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1); // 获取LineEdit的文本,并写入Excel单元格 QLineEdit* lineEdit = new QLineEdit(); QString text = lineEdit->text(); QAxObject* range = worksheet->querySubObject("Range(QString)", "A1"); range->dynamicCall("SetValue(const QVariant&)", QVariant(text)); // 保存Excel文件 workbook->dynamicCall("SaveAs(const QString&)", "路径/文件名.xlsx"); // 关闭Excel应用程序,释放资源 excel->dynamicCall("Quit(void)"); delete excel; } ``` 请注意,示例的路径/文件名.xlsx需要替换为实际保存Excel文件的路径和文件名。此外,代码还可以根据需要添加适当的错误检查和异常处理。 ### 回答2: 要将Qt的LineEdit(单行输入框)的内容存入Excel表,可以按照以下步骤进行操作。 首先,需要在Qt项目添加相应的Excel库。常用的Excel库有QAxObject、QXlsxWriter等。 其次,需要在Qt项目调用LineEdit获取用户输入的内容。可以通过信号槽机制,当用户点击保存按钮时,触发相应的槽函数获取LineEdit的内容。 接着,将获取到的内容写入Excel表。如果使用QAxObject库,可以使用其提供的COM接口来操作Excel表。首先,需要创建一个Excel应用对象并打开一个工作簿。然后,通过工作簿对象获取到要操作的工作表,再通过工作表对象来操作Excel表格的单元格。将LineEdit的内容写入指定单元格即可。 最后,记得最后关闭Excel应用对象和保存工作簿。使用QAxObject库时,可以通过调用Quit()和Clear()方法实现。 需要注意的是,使用QAxObject库时,需要保证操作系统上已安装Microsoft Office软件,以便正常调用COM接口。同时,需要谨慎处理异常情况,例如Excel的版本兼容性等问题。 总结来说,要将Qt的LineEdit的内容存入Excel表,主要涉及到获取LineEdit的内容、使用相应的Excel库进行Excel表的操作,并最后关闭Excel应用对象并保存工作簿。 ### 回答3: 使用Qt将LineEdit的内容存入Excel表可以通过以下步骤实现: 1. 首先,需要在Qt安装并使用Qt Excel组件,例如QtXlsxWriter,这可以帮助我们进行Excel操作。 2. 在Qt的工程文件添加Qt Excel组件的依赖项,并包含相应的头文件。 3. 在Qt的界面创建一个LineEdit控件用于输入要存入Excel表格的内容。例如,可以使用以下代码创建一个LineEdit控件: ```cpp QLineEdit *lineEdit = new QLineEdit(this); ``` 4. 创建一个按钮,用于触发保存操作。例如,可以使用以下代码创建一个保存按钮: ```cpp QPushButton *saveButton = new QPushButton("Save", this); ``` 5. 创建一个槽函数,以便在单击保存按钮时执行保存操作。在槽函数,将从LineEdit控件获取文本内容,并使用Qt Excel组件将其写入Excel表格。例如,可以使用以下代码实现保存操作: ```cpp void saveToExcel() { QString text = lineEdit->text(); // 获取LineEdit的文本内容 QXlsx::Document xlsx; // 创建一个Excel文档对象 xlsx.write("A1", text); // 将文本内容写入Excel的A1单元格 xlsx.saveAs("output.xlsx"); // 将Excel文档保存为output.xlsx文件 } ``` 6. 将保存按钮的clicked信号与saveToExcel槽函数连接起来,用于触发保存操作。例如,可以使用以下代码将信号与槽函数连接起来: ```cpp connect(saveButton, &QPushButton::clicked, this, &saveToExcel); ``` 通过以上步骤,我们可以使用Qt将LineEdit的内容存入Excel表格。在点击保存按钮时,将获取LineEdit的输入内容,并将其保存为output.xlsx文件,其文本内容将写入Excel表格的A1单元格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值