设置QLineEdit时std :: out_of_range

豆腐

在我的C ++应用程序中,我必须选择带有QFileDialog类的文件。然后,我验证我的文件名正确(必须以“ VG”开头)。

我的文件具有以下结构:VGx-xx-xxxx-xxx-xxx.pigs

之后,我在关联的QLineEdit中进行设置。但是每次我选择一个好的文件时,它都会崩溃,而且我也不知道为什么。

这是我的不同功能:

打开QFILE对话框

/** OPEN FILE DIALOG WINDOW  **/
void VGCCC::selectPIGSFile()
{
    QString pigsFile = QFileDialog::getOpenFileName
    (
        this,
        tr("Select PIGS file"),
        "./../VGCColorConfigurator/Inputs",
        tr("Document files (*.pigs *.igs)"),
        0,
        QFileDialog::DontUseNativeDialog
    );

    pigsPath = pigsFile;
    if(verifyPIGSFileValidity(pigsPath.toStdString()))
    {
        m_filePathLine->setText("");
        m_filePathLine->setText(pigsPath);
        m_testTextEdit->insertPlainText("File selected : "+pigsPath+"\n");
    }
    else
    {
        m_filePathLine->setText("Please select a valid PIGS (Format VGx-xx-xxxx-xxx-xxx.pigs)");
        m_testTextEdit->insertPlainText("Uncorrect PIGS file.\n");
    }
}

验证文件名

/** VERIFY SELECTED PIG FILE **/
bool VGCCC::verifyPIGSFileValidity(std::string pigsPath)
{
    splitPIGSName(pigsPath);
    std::string verification = pigsNameTable[0].erase(2,2);
    std::string headerName = "VG";

    if(!verification.compare(headerName))
    {
        m_testTextEdit->insertPlainText("PIGS name is correct");
        return true;
    }
    else
        return false;
}

分割方法

/** SPLIT PIGS NAME INTO TABLE **/
std::string* VGCCC::splitPIGSName(std::string pigsPath)
{
    std::string pigsPathToSplit = pigsPath;
    std::string delimiter = "-";
    size_t position = 0;
    int i=0;
    std::string token;

    while ((position = pigsPathToSplit.find(delimiter)) != std::string::npos)
    {
        token = pigsPathToSplit.substr(0, position);
        std::cout << token << std::endl;
        pigsNameTable[i] = token;
        i++;
        pigsPathToSplit.erase(0, position + delimiter.length());
    }
    pigsNameTable[4] = pigsPathToSplit.c_str();
    std::cout << pigsPathToSplit << std::endl;
}
jpo38
bool VGCCC::verifyPIGSFileValidity(std::string pigsPath)
{
    splitPIGSName(pigsPath);
    std::string verification = pigsNameTable[0].erase(2,2);
    std::string headerName = "VG";

    if(!verification.compare(headerName))
    {
        m_testTextEdit->insertPlainText("PIGS name is correct");
        return true;
    }
    else
        return false;
}

不安全是因为:

1-您不检查pigsNameTable索引处是否有元素(如果是vector?)或键是否有元素(如果是map?)0

2-您不要检查pigsNameTable[0]元素是否超过2个。请参阅清除文档

pos:要删除的第一个字符的位置。如果该长度大于字符串长度,则抛出out_of_range。

您可以简单地执行以下操作:

bool VGCCC::verifyPIGSFileValidity(std::string pigsPath)
{
    splitPIGSName(pigsPath);

    if ( /* test is pigsNameTable[0] exists depending on pigsNameTable's type */ )
    {
        return pigsNameTable[0].find( "VG" ) == 0; // return true if pigsNameTable[0] starts with "VG"
    }
    else
    {
        return false;
    }
}

如果pigsNameTablevector通过测试可以!pigsNameTable.empty(),如果它是一个mappigsNameTable.find(0) != pigsNameTable.end()....

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异常'out_of_range'不是std的成员?

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

C ++向量:std :: out_of_range错误

来自分类Dev

std :: stoi,std :: setbase和std :: out_of_range错误

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

C ++ std :: out_of_range在内存位置

来自分类Dev

Microsoft C ++异常:std :: out_of_range错误?

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

C ++中带有矢量的'std :: out_of_range'实例

来自分类Dev

使用相同函数时意外收到“std::out_of_range”错误

来自分类Dev

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

以类型为std :: out_of_range的未捕获异常终止终止错误

来自分类Dev

在C ++中抛出'std :: out_of_range'实例后调用终止

来自分类Dev

C ++:未处理的异常:内存位置处的std :: out_of_range

来自分类Dev

引发std :: out_of_range异常。“预期的类型说明符”

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

C++ 合并排序实现中抛出的 std::out_of_range 异常

来自分类Dev

从 Hex 到 Dual 的转换总是导致内存位置处的 std::out_of_range

来自分类Dev

比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

来自分类Dev

libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

来自分类Dev

合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

来自分类Dev

将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

来自分类Dev

如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值,直到被告知要中断

来自分类Dev

如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值直到被告知要中断

来自分类Dev

"if (argc < 2 || argc > 2)" 应该有 2 个参数吗?& 在抛出“std::out_of_range”错误实例后调用终止

来自分类Dev

在向量的向量上捕捉out_of_range

来自分类Dev

错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

Related 相关文章

  1. 1

    异常'out_of_range'不是std的成员?

  2. 2

    不会引发std :: out_of_range异常

  3. 3

    不会引发std :: out_of_range异常

  4. 4

    C ++向量:std :: out_of_range错误

  5. 5

    std :: stoi,std :: setbase和std :: out_of_range错误

  6. 6

    抛出'std :: out_of_range'实例后调用终止

  7. 7

    C ++ std :: out_of_range在内存位置

  8. 8

    Microsoft C ++异常:std :: out_of_range错误?

  9. 9

    抛出'std :: out_of_range'实例后调用终止

  10. 10

    C ++中带有矢量的'std :: out_of_range'实例

  11. 11

    使用相同函数时意外收到“std::out_of_range”错误

  12. 12

    抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

  13. 13

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  14. 14

    以类型为std :: out_of_range的未捕获异常终止终止错误

  15. 15

    在C ++中抛出'std :: out_of_range'实例后调用终止

  16. 16

    C ++:未处理的异常:内存位置处的std :: out_of_range

  17. 17

    引发std :: out_of_range异常。“预期的类型说明符”

  18. 18

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  19. 19

    C++ 合并排序实现中抛出的 std::out_of_range 异常

  20. 20

    从 Hex 到 Dual 的转换总是导致内存位置处的 std::out_of_range

  21. 21

    比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

  22. 22

    libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

  23. 23

    合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

  24. 24

    将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

  25. 25

    如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值,直到被告知要中断

  26. 26

    如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值直到被告知要中断

  27. 27

    "if (argc < 2 || argc > 2)" 应该有 2 个参数吗?& 在抛出“std::out_of_range”错误实例后调用终止

  28. 28

    在向量的向量上捕捉out_of_range

  29. 29

    错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

热门标签

归档