工作中遇到的一些小问题,总结的小知识记录:C++/Qt
小知识
- RGBA/ARGB转16进制颜色
- int与RGB互转
- int转Hex值
- VS2015代码粗略统计
- QTableWidget设置
- 列宽设置
- 整行选中
- Item设置可选中但不可编辑
- C++ std路径相关操作
- 文件写出
- 绝对路径转为相对路径
- 字符替换
- 打印出GBK的平方米/立方米符号
RGBA/ARGB转16进制颜色
使用QColor支持
// ARGB转Hex
QColor c;
c.setRed(color0.GetRed());
c.setGreen(color0.GetGreen());
c.setBlue(color0.GetBlue());
std::string strHexColor = c.name(QColor::HexArgb).toStdString();
//同理Hex转ARGB
QColor c(strHex);
int与RGB互转
//int 转换成 QColor
int red = nRGB >> 16 & 255;
int green = nRGB >> 8 & 255;
int blue = nRGB & 255;
QColor color = QColor(red, green, blue);
// QColor转换成int
int nRGB = ((0xFF << 24) | (color.red() << 16) | (color.green() << 8) | color.blue());
int转Hex值
使用QString支持
QString strHex = QString::number(255, 16); // "FF"
//同理转回int
QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16); // hex == 255, ok == true
VS2015代码粗略统计
b*[^:b#/]+.*$
a. 编辑-查找和替换-选中“在文件中查找”弹出一个查找框;
b. 输入正则表达式 b*[^:b#/]+.*$;
选择查找整个解决方案,查找选项选择使用正则表达式,查找全部,最后就会统计出一共有几行。
QTableWidget设置
列宽设置
// 列宽自适应
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 最后一列自适应拉伸
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
// 自定义列宽
ui->tableWidget->setColumnWidth(0, 30);
ui->tableWidget->setColumnWidth(1, 50);
ui->tableWidget->setColumnWidth(2, 150);
ui->tableWidget->setColumnWidth(3, 150);
ui->tableWidget->setColumnWidth(4, 120);
ui->tableWidget->setColumnWidth(5, 50);
整行选中
//整行选中的方式
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
//只选中一行
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
Item设置可选中但不可编辑
pItem->setFlags(pItem->flags() & ~Qt::ItemIsEditable);
C++ std路径相关操作
文件写出
// 文件写出
std::ofstream outfile("upload.txt", std::ios::out);
outfile.write(pBuffer, nLen);
outfile.close();
绝对路径转为相对路径
std::string strRootDir = "D:/Developer/Project/Document";
std::string strFilePath = "D:/Developer/Project/Document/xx.json";
if (strFilePath.find_first_of(strRootDir) >=0)
{
strFilePath = "./" + strFilePath.substr(strRootDir.size() + 1, strFilePath.size() - 1);
}
// --> ./xx.json
字符替换
std::replace(strFileName.begin(), strFileName.end(), '\\', '/');
打印出GBK的平方米/立方米符号
QString GetSquareMeterString(char nSquare)
{
char16_t square = 0xB2; // 平方米
if (nSquare == 3)
{
square = 0xB3; // 立方米
}
return "m" + QString::fromUtf16(&square, 1);
}