qt使用笔记一:信号与槽、GUI搬砖、打开文件、字符串处理

最近在做一个小demo,总结一下qt使用过程中的一些心得,环境是在VS2019+qt tools下使用:

1.信号与槽

信号与槽标准形式举例:

QAction* m_image = new QAction(QIcon("../Image/act1.png"), QString::fromLocal8Bit("打开图像"), this);
connect(act1, SIGNAL(triggered()), this, SLOT(pSlot1()));

开始时通过代码添加了空间,也给了connect语句,可运行起来点击按钮就是没有反应,后来发现需要在类里边添加专门的槽函数,新建的工程只有public+private两个属性,需要添加专门的privarte slots,然后将槽函数放到里边就可以了
在这里插入图片描述

2.GUI搬砖

搬砖式操作方法:
选择控件-摆放位置-查看控件对象名称-添加槽函数
在这里插入图片描述
在这里插入图片描述

//定义
private slots:
    void slot1();

//连接
 connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(slot1()));

属性栏也有各种可改项,具体慢慢探索吧
在这里插入图片描述

3.打开文件

3.1 文件读取:

void breaker::txt_read()
{
    QSettings setting("./Setting.ini", QSettings::IniFormat);          //为了能记住上次打开的路径
    QString lastPath = setting.value("LastFilePath").toString();
    QString filename = QFileDialog::getOpenFileName(this,
        QString::fromLocal8Bit("读入文本"), lastPath,QString::fromLocal8Bit("text (*.txt *.bin )"));
    if (filename.isEmpty())
    {
        return;
    }
    else
    {
        if (!filename.isNull()) //加载图像
        {
            //filename是选择的文件名
            QFile file(filename);
            if (!file.open(QFile::ReadOnly | QFile::Text))
            {
                QMessageBox::warning(this, QString::fromLocal8Bit("Error"), QString::fromLocal8Bit("打开文件错误!").arg(file.errorString()));
            }
            ui.lineEdit->setText(filename);
            open_path = filename.toStdString();
        }
    }
}

//功能分开实现的,就没使用QFile
//读入数据
    std::ifstream infile(open_path, std::ios::in);
    int i = 0;
    
    while (infile.good())
    {
        cv::Point3f p;
        infile >> p.x >> p.y >> p.z;
        points.push_back(p);
        i++;
    }

3.2 文件写入

void breaker::txt_write()
{
    QSettings setting("./Setting.ini", QSettings::IniFormat);          //为了能记住上次打开的路径
    QString lastPath = setting.value("LastFilePath").toString();
    QString filename = QFileDialog::getOpenFileName(this,
        QString::fromLocal8Bit("写出文本"), lastPath, QString::fromLocal8Bit("text (*.txt *.bin )"));
    if (filename.isEmpty())
    {
        return;
    }
    else
    {
        ui.lineEdit_2->setText(filename);
        save_path = filename.toStdString();
    }
}

if (save_path.empty())
    {
        return;
    }
    else {
        //保存结果到txt
        std::ofstream outfile(save_path, std::ios::app);
        outfile << t0 << "\t" << t1 << "\t" << t2 << "\n";
        outfile.close();
    }

4.字符串处理

4.1 输出

//方法一:string转QString
 //显示结果
    std::string res0 = "(" + std::to_string(key.center.x) + "," + std::to_string(key.center.y) +
        "," + std::to_string(key.center.z) + ")\n";
    std::string res1 = std::to_string(key.radius) + "\n";
    std::string res2 = "("+std::to_string(key.normal_V.x)+","+std::to_string(key.normal_V.y)+","+
        std::to_string(key.normal_V.z)+")\n";
    QString str_res = QString::fromLocal8Bit("拟合中点坐标:") + QString::fromStdString(res0) +
        QString::fromLocal8Bit("拟合半径:") + QString::fromStdString(res1) +
        QString::fromLocal8Bit("三维空间圆法向量:") + QString::fromStdString(res2)+"\n";
    ui.textBrowser->append(str_res);

//方法二:QString
QString res = QString::fromLocal8Bit("计算角度结果分别为:\n") +
        QString::fromLocal8Bit("角1:") + QString::number(t0) + "\n" +
        QString::fromLocal8Bit("角2:") + QString::number(t1) + "\n" +
        QString::fromLocal8Bit("角3:") + QString::number(t2) + "\n";
    ui.textBrowser->append(res);

4.2 字符串比较

if (ui.lineEdit_4->text()[0] == "x" || ui.lineEdit_5->text()[0] == "x")
    {
        QMessageBox::information(this, QString::fromLocal8Bit("warning!"), QString::fromLocal8Bit("请输入点坐标"));
        return;
    }
    QString str_1 = ui.lineEdit_4->text();
    QString str_2 = ui.lineEdit_5->text();

4.3 QT字符串分割

//为了方便应用,写成了内联函数
inline void Strsplit(const::QString&str,cv::Point3f&point)
{
    //此处空格也可换成"," "."等等
    QStringList list = str.split(" ");
    QString x = list[0];
    QString y = list[1];
    QString z = list[2];
    point.x = x.toFloat();
    point.y = y.toFloat();
    point.z = z.toFloat();
}

5.查看帮助

在这里插入图片描述

void breaker::seehelp()
{
    QString str = QString::fromLocal8Bit("txt文件格式要求:\n\n")+
        QString::fromLocal8Bit("0.参数初始化文件:*******\n\n") +
        QString::fromLocal8Bit("1.**********************\n\n");
    QMessageBox::information(this, QString::fromLocal8Bit("提示!"), str);
}

先这样吧,后续再补!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月醉窗台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值