小编dan*_*ber的帖子

为什么我的 Qt 应用程序无缘无故崩溃?

我正在编写一个中型应用程序,用于存储基于 sqlite 数据库的数据。我创建了一个对话框来将数据添加到数据库。在保存数据之前,它将检查某些条件以确保输入的数据有效。这是一个简单的过程。并且容易发现故障。我确信他们在任何时候都不会导致应用程序崩溃。该应用程序编译也没有错误。有时它运行良好,但最可能的是它崩溃并关闭。

  1. 我的第一个问题是为什么会发生这种事情。(有时它运行良好,有时它在相同条件下崩溃)。

  2. 在这种情况下如何查找故障。简而言之,我所做的是,我用来更改逻辑并更改代码,认为这会更改二进制文件并纠正错误。

    前任:-

    if(query.exec()){
         //codes here.
     }
    
    Run Code Online (Sandbox Code Playgroud)

    我将用以下代码替换此代码

    bool ok=query.exec();
      if(ok){
           //code here....
     }
    
    Run Code Online (Sandbox Code Playgroud)

请在这种情况下帮助我,我将非常感谢您的建议。我将添加 导致应用程序崩溃的newMember.h和。newMember.cpp(这是我的对话框的类new member)。如果需要更多数据,请告诉我,我也会添加它们。

在错误报告中,在错误签名中提到了ModName:qtgui4.dll , Offset: 000c14e6

新成员.h

       #ifndef NEWMEMBER_H
       #define NEWMEMBER_H

       #include "ui_newmember.h"


       class newMember : public QDialog, private Ui::newMember
       {
           Q_OBJECT

       private:
           QString path_1;
           QPixmap pic;

       public:
           newMember(QString str, QWidget *parent );


       public slots:
           void browse();
           void save_2();

      };

      #endif // NEWMEMBER_H
Run Code Online (Sandbox Code Playgroud)

新成员.cpp

        #include "newmember.h"
        #include<QtGui>
        #include<QtSql/QSqlDatabase>
        #include <QSqlQuery>
        #include <QSqlError>

        newMember::newMember(QString str, QWidget …
Run Code Online (Sandbox Code Playgroud)

c++ qt

7
推荐指数
1
解决办法
2万
查看次数

在Qt组合框中设置项目

我对Qt很新.我正在学习本教程http://sector.ynet.sk/qt4-tutorial/my-first-qt-gui-application.html.本教程中有一个小错误.虽然它添加了一个组合框条目,但未设置文本.有人可以告诉我如何正确初始化组合框.

另外,有人可以指出我是否有更好的学习Qt的教程?

c++ qt combobox

6
推荐指数
3
解决办法
2万
查看次数

Qt 5.8 msvc 2015编译错误

我已经使用离线安装程序安装了Qt qt-opensource-windows-x86-msvc2015_64-5.8.0.我有使用c ++构建工具安装的visual studio社区版2017.因为它的编译器与qt版本不兼容,所以我从http://landinghub.visualstudio.com/visual-cpp-build-tools安装了visual c ++ build tools 2015.当我尝试编译项目时,它会出错.这是我的qt工具包的样子, :-1: error: LNK1158: cannot run 'rc.exe'在此输入图像描述

在此输入图像描述

有人可以弄清楚这是什么错误以及如何解决它.谢谢.

qt visual-studio

4
推荐指数
1
解决办法
2440
查看次数

使用reinterpret_cast将char*转换为vector <byte>

我正在使用一个名为botan的库来加密.但这里的情况与库无关,似乎是c ++或者转换中的一个问题.使用该库创建一个16字节长的向量,如下所示.

  SecureVector<byte> salt = rng.random_vec(16);
Run Code Online (Sandbox Code Playgroud)

然后它被转换为字符串,

  std::string salt_string ((const char*)salt.begin() , salt.size());
Run Code Online (Sandbox Code Playgroud)

使用Qt我只能读取srting,

  ui->textEdit->append("Salt is : "+ QString::fromStdString(salt_string));
Run Code Online (Sandbox Code Playgroud)

现在我需要将其写入文件并在以后重新生成向量.它被写入文件,

 ofstream outfile ("salt.txt" , std::ios::binary);
 outfile.write((const char*)salt.begin(), salt.size());
Run Code Online (Sandbox Code Playgroud)

到目前为止,代码看起来很有效,并且在读取和重新生成向量时会出现问题.

这是我如何将数据读取到char*数组,

  ifstream infile ("salt.txt" , std::ios::binary );
  char* salt = new char[16];
  infile.read(salt , 16 );
Run Code Online (Sandbox Code Playgroud)

现在我需要重新创建SecureVector<byte>as2,我尝试使用reinterpret_cast如下所示,

 SecureVector<byte> salt2 = reinterpret_cast<byte> (salt);
Run Code Online (Sandbox Code Playgroud)

编译没有错误,但在尝试显示为上面显示的盐时返回一个空字符串.我做错了什么或如何正确地进行转换.任何帮助或建议将受到高度赞赏.

c++

1
推荐指数
1
解决办法
1616
查看次数

新线程上的应用程序崩溃开始

为什么这个应用程序崩溃新线程开始,请somybody指出我有没有做错了..

newthread.h

   #ifndef NEWTHREAD_H
    #define NEWTHREAD_H
   #include <QThread>

    class newthread: public QThread
    {
        public:
           newthread();

        public slots:
            void run();
     };

     #endif // NEWTHREAD_H
Run Code Online (Sandbox Code Playgroud)

newthread.cpp

    #include "newthread.h"
    #include "mainwindow.h"
    #include<QDebug>

     newthread::newthread()
     {
     }

    void newthread::run(){
       qDebug()<<"thread executed";
    } 
Run Code Online (Sandbox Code Playgroud)

mainwindow.cpp

    #include <QtGui>
       #include "mainwindow.h"
    #include"newthread.h"



     MainWindow::MainWindow(QWidget *parent)
     {
        setupUi(this);
      connect(pushButton,SIGNAL(clicked()),this, SLOT(opthread()));

       }

    void MainWindow::opthread(){
    newthread th;
     th.start();
     }
Run Code Online (Sandbox Code Playgroud)

在主窗口中有一个名为ophthread()的公共插槽.如上图所示,当按下主窗口中的按钮时,该槽将被触发.在它中ii声明了一个名为th的thth和th.start()的新线程对象来启动它.我做错了什么.

这没有错误编译.但是当运行二进制文件时,它会出错并崩溃.

我的第二个问题是,如果我需要线程在主窗口的textEdit上写一些文本如何做到这一点.是否可以在mainwindow类中使用newthread类访问对象.

c++ qt multithreading

0
推荐指数
1
解决办法
1046
查看次数

为什么二进制文件I/O会在读取时提供一些随机数据

我会清楚地解释我要做什么.

我有一个文本文件,前16个字节包含一个名为salt的东西,接下来的32个字节包含一个名为iv的东西.(这些东西与加密有关,而不是这里的问题.)

下面是文本文件的样子.

现在我使用下面的代码将它们读入两个char数组,以便将它们分开.

   ifstream infile ("salt.txt" , std::ios::binary );


   char* salt = new char[16];
   char* iv = new char[32];

   infile.read(salt , 16 );
   infile.seekg(16, ios::beg);
   infile.read(iv, 32  );

   ui->textEdit_3->append("salt : "+ QString::fromStdString(salt) );
   ui->textEdit_3->append("iv : "+ QString::fromStdString(iv) + "\n\n" );
   infile.close();
Run Code Online (Sandbox Code Playgroud)

我使用Qt进行gui设计,最后三行用于在文本编辑中显示结果.

当我多次读取同一文本文件时,它会在最后4或5个字节上提供一些随机数据.

下图显示了从同一文本文件中获取的一些读数.

在此输入图像描述

这件事真的发生在这里.我无法弄清楚这种奇怪行为的原因.

c++

0
推荐指数
1
解决办法
201
查看次数

标签 统计

c++ ×5

qt ×4

combobox ×1

multithreading ×1

visual-studio ×1