QT和c++的一些使用记录

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空一行的方法

&nbsp;&emsp;

24. 怎么打开.ipynb文件

  • cmd 然后找到你要打开的文件目录 最后输入jupyter notebook
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值