获得徽章 27
在Qt中,可以使用QAxObject类来调用Excel的COM接口,从而通过编程的方式控制Excel并创建表格。下面演示了如何使用Qt调用Excel的接口来创建表格:

#include <QApplication>
#include <QAxObject>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QAxObject excel("Excel.Application", 0);

// 创建新的工作簿
QAxObject *workbooks = excel.querySubObject("Workbooks");
workbooks->dynamicCall("Add");

// 获取活动工作表
QAxObject *workbook = excel.querySubObject("ActiveWorkBook");
QAxObject *worksheets = workbook->querySubObject("Sheets");
QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);

// 在第一行第一列写入数据
QAxObject *cell = worksheet->querySubObject("Cells(int,int)", 1, 1);
cell->setProperty("Value", "Hello");

// 保存工作簿并关闭Excel应用
workbook->dynamicCall("SaveAs(const QString&)", "C:/example.xlsx");
excel.dynamicCall("Quit()");
}
return a.exec();
}
展开
评论
在Windows下可以使用select函数,用于在接收网络数据之前先检查是否有数据可读,从而避免阻塞。

#include <winsock2.h>
#include <stdio.h>

int main()
{
// 初始化 Winsock
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);

// 创建socket
SOCKET sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// ... 设置 sockfd 的相关参数

// 声明并初始化 fd_set
fd_set readSet;
FD_ZERO(&readSet);
FD_SET(sockfd, &readSet);

// 设置超时时间为0,即立即返回
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;

// 调用 select 函数进行检查
int ret = select(0, &readSet, NULL, NULL, &timeout);
if (ret > 0 && FD_ISSET(sockfd, &readSet))
{
// 可以接收数据,调用 recv 函数
char buffer[1024];
int bytesReceived = recv(sockfd, buffer, sizeof(buffer), 0);
// 处理接收到的数据
}
else if (ret == 0)
{
// 没有数据可读
}
else
{
// select 调用出错
}

// 关闭socket
closesocket(sockfd);
// 清理 Winsock
WSACleanup();
return 0;
}
展开
1
Qt设置消息对话框的样式,比如:设置字体为黑色。

样式代码:
QMessageBox QLabel {
color: black;
}

比如,调用QMessageBox::about()弹出对话框。
注意: 对话框样式的设置需要在对话框显示之前进行,可以在调用QMessageBox::about()之前设置样式。

示例代码:
QMessageBox msgBox;
msgBox.setStyleSheet("QMessageBox QLabel { color: black; }");
msgBox.about(this, "提示", tr("TCP服务器连接失败!"));

通过先创建一个QMessageBox对象,然后设置样式,再调用about()方法显示对话框,就可以应用样式到对话框的文本中。
样式表是通过设置QMessageBox的子控件QLabel的样式来实现的。需要使用QMessageBox QLabel选择器来设置字体颜色为黑色。
展开
DS小龙哥于2023-12-22 14:36发布的图片
评论
DS小龙哥
VIP.1 初学乍练
关注了
嵌入式工程师 @仙鹅科技有限公司
Qt文件存储: 文件序列化写、序列化读案例

以下是一个示例的封装函数,用于将数据按行追加写入文件中,并封装了一个读取文件的函数用于按行读取并打印出来。


#include <QFile>
#include <QTextStream>
#include <QDebug>

// 将数据按行追加写入文件
void appendDataToFile(const QString& filename, const QString& time, int temperature, int humidity, int lightIntensity)
{
QFile file(filename);
if (file.open(QIODevice::Append | QIODevice::Text))
{
QTextStream stream(&file);
stream << time << ";" << temperature << ";" << humidity << ";" << lightIntensity << "\n";
file.close();
}
}


// 读取文件并按行打印数据
void printDataFromFile(const QString& filename)
{
QFile file(filename);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream stream(&file);
while (!stream.atEnd())
{
QString line = stream.readLine();
qDebug() << line;
}
file.close();
}
}
展开
1
掘友们,有没有笔记本推荐的。
DS小龙哥于2023-12-16 15:21发布的图片
DS小龙哥于2023-12-16 15:21发布的图片
DS小龙哥于2023-12-16 15:21发布的图片
9
DS小龙哥
VIP.1 初学乍练
关注了
嵌入式工程师 @仙鹅科技有限公司
#我的2023年度关键词#

在Linux下,Qt中调用C语言的close函数容易与Qt的类成员函数close产生歧义。为了解决这个问题,可以使用全局作用域操作符(::)来明确指定调用的是C语言的close函数而不是Qt的类成员函数。

例如,如果要调用C语言的close函数关闭文件描述符fd,可以这样编写代码:
::close(fd);

在上面的代码中,双冒号(::)表示使用全局作用域,明确指定调用的是全局命名空间中的close函数,而不是当前命名空间中的同名函数。

通过使用全局作用域操作符,可以解决C语言的标准库函数与Qt类成员函数重名的问题,确保正确调用目标函数。
展开
评论
下一页
个人成就
文章被点赞 729
文章被阅读 326,298
掘力值 14,585
收藏集
0
关注标签
7
加入于