文章目录
- 1. QT窗口全屏显示
- 2. 滑动条QSlider和轮选框spinBox的联动
- 3. 轮选框spinBox设置范围和步长以及框内文字后缀
- 4. textEdit以及lineEdit
- 5. QString↔string且中文不乱码的方法
- 6. 获取不带路径和后缀的文件名
- 7. 自定义一个延时函数
- 8. 以流的形式给点云赋不同的id
- 9. 清空vtk窗口里各种点云形状等
- 10. 新建文件夹
- 11. 创建计时器
- 12. 获取当前系统时间
- 13. 关闭以及最小最大化窗口
- 14. QString.arg字符格式输出符
- 15. qt槽函数
- 16. 字符串与数字
- 17. 指针 数组指针 指针数组
- 18. argc和argv
- 19. calloc和malloc
- 20. 导入和保存Polygon文件
- 21. c++判断文件状态
- 22. PCL命名规范
- 23. markdown空一行的方法
- 24. 怎么打开.ipynb文件
1. QT窗口全屏显示
- 大概尝试了以下几种全屏显示的方法,推荐使用第一种,后面三种在使用过程中会出现点击按钮后界面偶尔会卡住然后lineEdit控件不显示参数。
this->setWindowFlags(Qt::CustomizeWindowHint);
this->showFullScreen();
this->setWindowState(Qt::WindowFullScreen);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); // 去掉标题栏,去掉任务栏显示,窗口置顶
2. 滑动条QSlider和轮选框spinBox的联动
- 设置信号和槽函数将QSlider和spinBox值的改变互相绑定
- 其次由于QSpinBox::valueChanged出现了函数重载(int或char),应定义函数指针排除二义性
#include <QSlider> //滑动条头文件
#include <QSpinBox>
void (QSpinBox:: *box_signal ) (int) = &QSpinBox::valueChanged;
void (QSpinBox:: *box_signal1 ) (int) = &QSpinBox::valueChanged;
connect(ui->spinBox ,box_signal , ui->horizontalSlider, &QSlider::setValue);//滑动条改变,数值跟着改变
connect(ui->horizontalSlidert, &QSlider::valueChanged, ui->spinBox, &QSpinBox::setValue);//数值改变,滑动条跟着改变
connect(ui->spinBox_2 ,box_signal1 , ui->horizontalSlider_2, &QSlider::setValue);//滑动条改变,数值跟着改变
connect(ui->horizontalSlider_2, &QSlider::valueChanged, ui->spinBox_2, &QSpinBox::setValue);//数值改变,滑动条跟着改变
3. 轮选框spinBox设置范围和步长以及框内文字后缀
//设置可选范围
ui->spinBox->setRange(0,360);
//设置按键按一下值增加几个数
ui->spinBox->setSingleStep(10);
//设置框内文字后缀
ui->spinBox->setSuffix(QString::fromLocal8Bit("°"));
4. textEdit以及lineEdit
//清空
ui->lineEdit->clear();
ui->textEdit->clear();
ui->lineEdit->setText("");
ui->textEdit->setText("");
//输入字符串或数字 setText里的内容需是Qstring格式的
QString qstr;
ui->lineEdit->setText(qstr);
ui->textEdit->setText(qstr);
//倘若输入的是数字需要用QString::number()转一下
int a;
ui->lineEdit->setText(QString::number(a));
ui->textEdit->setText(QString::number(a));
//倘若输入的是中文需要用QString::fromLocal8Bit(names.data(str))转一下
string str;
ui->lineEdit->setText(QString::fromLocal8Bit(names.data(str)));
ui->textEdit->setText(QString::fromLocal8Bit(names.data(str)));
//在末尾追加文字
ui->lineEdit->insert(qstr); //这个不能够行尾换行
ui->textEdit->append(qstr); //这个默认行尾换行输入,不知道怎么改成不换行
//其次在textEdit里"/n"可以换行
5. QString↔string且中文不乱码的方法
//QString➡string
QString path = QFileDialog::getOpenFileName(this, "chose point cloud", ".//", " (*.ply *.pcd);; (*.*)");
std::string temp = path.toLocal8Bit().toStdString();
//string➡QString
string str;
QString happy = QString::fromLocal8Bit(str.c_str());
6. 获取不带路径和后缀的文件名
// 路径/的后一位的索引即文件名的第一个字符
std::string::size_type iPos = temp.find_last_of('/') + 1;
// filename 带后缀的文件名 substr截取字符串中d
std::string filename = temp.substr(iPos, path.length() - iPos);
// 不带后缀的文件名
std::string names = filename.substr(0, filename.rfind("."));
//QString类型可以endsWith判断字符串结尾 返回值为bool类型
if (path.endsWith(".pcd", Qt::CaseInsensitive))
7. 自定义一个延时函数
#include <time.h>
void MainWindow::delay(int seconds) // 参数必须为整型,表示延时多少秒
{
clock_t start = clock();
clock_t lay = (clock_t)seconds * CLOCKS_PER_SEC;
while ((clock()-start) < lay);
}
8. 以流的形式给点云赋不同的id
int a = 0;
std::stringstream ss;
std::string OBB;
ss << a++;
ss >> OBB;
OBB += "_OBB";
9. 清空vtk窗口里各种点云形状等
m_Cloud->clear();
viewer->removeAllPointClouds();
viewer->removeAllCoordinateSystems();
viewer->removeAllShapes();
10. 新建文件夹
bool ismkdir = QDir().mkdir("./happy");
11. 创建计时器
#include <QTime>
QTimer *timer1 = new QTimer(this);
timer1->start(t);
timer1->setInterval(1000);//间隔是1s
connect(timer1,&QTimer::timeout,this,[=]()mutable
{
if(t>=0)
{
//qDebug()<<"倒计时开始";
//intVal--;
std::cout<<"计时器t的值"<<t<<endl;
//ui->lcdNumber->display(secsToTime(val));
ui->prompt->setText(QString::fromLocal8Bit("预计剩余%1秒").arg(QString::number(t)));
t--;
}
else
{
timer1->stop();
}
});
12. 获取当前系统时间
#include <QDateTime>
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy_MM_dd_hh_mm_ss_zzz");
string s = current_date.toStdString();
13. 关闭以及最小最大化窗口
//关闭窗口
void MainWindow::on_pushButton_clicked()
{
if (!(QMessageBox::information(this,tr("CLOSE").toUtf8(),tr("Would you want to close").toUtf8(),tr("Yes"),tr("No"))))
{
QApplication* app; app->exit(0);
}
}
//最小化窗口
void MainWindow::on_minBtn_clicked()
{
this->showMinimized();
}
//最大化窗口
void MainWindow::on_maxBtn_clicked()
{
QWindow * pWindow = windowHandle();
Qt::WindowStates state = windowState();
if (state & Qt::WindowMaximized)
{
this->showNormal();
}
else
{
this->showMaximized();
}
}
14. QString.arg字符格式输出符
QString str = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").
arg("1","2","3","4","5","6","7","8","9")
arg(str1, str2, str3)
arg(str1).arg(str2).arg(str3)
arg(int, int, int)
15. qt槽函数
//ui界面右键转到槽 默认命名方式 on_对象名称_动作()
void on_pushButton_clicked();//.h声明
void MainWindow::on_pushButton_carton_clicked(){}//.cpp定义
//自定义显式链接
void MainWindow::connectSignalSlot()
{
connect(ui->pushButton_6,&QPushButton::clicked,this,&MainWindow::on_actionOpen_triggered);
}
16. 字符串与数字
- 发现一个也许有用的控制小数点后几位转字符串的方法
- str = str.sprintf(“%.2f”,total);
- string转int
- int num = str.toInt();
- string转float
- float price = str.toFloat();
- 十进制整数进制转换后转为字符串
- str=str.setNum(val,16);//转换为16进制
- str=str.setNum(val,2);
- 二进制进制转换后转为字符串
- int val = str.toInt(&ok,2); //以二进制读入
- str=QString::number(val,10); //转化为十进制数字
- str=str.setNum(val,16);
- str=str.toUpper();//将字符串中的小写字母转换为大写
17. 指针 数组指针 指针数组
- 指针数组和数组指针
- 优先级
- 指针数组 int *a[5]
- 数组a中放的元素是指针,每个指针指向的变量类型是int
- 数组指针 int *a
- 变量a是一个指针,指针指向匿名数组(数组首地址),数组中存放的是int类型的变量
18. argc和argv
- int main(int argc, char **argv)怎么给argv赋值
- 打开exe文件路径在路径框中输入cmd打开命令窗口 输入可执行文件名 xxx.exe(这个为argv[0] ),后面跟的的就是argv[1]
- 概念理解char *argv[]和 char **argv的区别
- char *argv[] 指针数组
- argv[] 是一个数组,数组存放的每个元素是指向char字符类型变量的指针(指向字符串的首地址),argv[i]是指针数组中第i个字符串的地址;argv为字符型指针数组的首地址为常量
- char **argv 数组指针
- 一个指向字符型指针的指针(这是一个指针,指针指向的是指针2,指针2指向的是一个char字符类型的变量),argv[i]是指针数组中第i个字符串的地址
19. calloc和malloc
- void *calloc(size_t nitems, size_t size)
- 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零
- nitems – 要被分配的元素个数
- size – 元素的大小
- void *malloc(size_t size)
- 分配所需的内存空间(字节数),并返回一个指向它的指针
20. 导入和保存Polygon文件
# include <pcl/io/vtk_lib_io.h>
int
pcl::io::loadPolygonFile (const std::string &file_name,
pcl::PolygonMesh& mesh);
bool
pcl::io::savePolygonFile (const std::string &file_name,
const pcl::PolygonMesh& mesh,
const bool binary_format = true);
int
pcl::io::loadPolygonFilePLY (const std::string &file_name,
pcl::PolygonMesh& mesh);
bool
pcl::io::savePolygonFilePLY (const std::string &file_name,
const pcl::PolygonMesh& mesh,
const bool binary_format = true);
21. c++判断文件状态
- c++ .good()函数
stream 流类型 good()用于判断当前流的状态是否正常
读写文件 fstream ifstream ofstream
读写字符串流stringstream istringstream ostringstream
- eof()
用来判断文件是否为空,抑或是判断其是否读到文件结尾
- 判断文件是否为空时使用peek函数,若peek返回EOF则文件为空
- c_str()
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同
char c[20];
string s="1234";
strcpy(c,s.c_str());
22. PCL命名规范
文件/目录
单词间以下划线_连接include语句
当文件在同一目录下时include指示语句用双引号,在其他情况下则用尖括号命名空间
namespace
单词间以下划线_连接类/结构体
class/struct
CamelCased(驼峰命名)连写单词首字母大写(若含缩写则缩写全部大写)名词函数/成员函数
函数名camelCased(小驼峰命名)动词 ;参数的命名单词以下划线_连接变量命名
单词间以下划线_连接常量命名
名字应该全是大写成员变量命名
单词间以下划线_连接并以下划线结束
23. markdown空一行的方法
 
24. 怎么打开.ipynb文件
- cmd 然后找到你要打开的文件目录 最后输入jupyter notebook