我正在编写一个中型应用程序,用于存储基于 sqlite 数据库的数据。我创建了一个对话框来将数据添加到数据库。在保存数据之前,它将检查某些条件以确保输入的数据有效。这是一个简单的过程。并且容易发现故障。我确信他们在任何时候都不会导致应用程序崩溃。该应用程序编译也没有错误。有时它运行良好,但最可能的是它崩溃并关闭。
我的第一个问题是为什么会发生这种事情。(有时它运行良好,有时它在相同条件下崩溃)。
在这种情况下如何查找故障。简而言之,我所做的是,我用来更改逻辑并更改代码,认为这会更改二进制文件并纠正错误。
前任:-
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) 我对Qt很新.我正在学习本教程http://sector.ynet.sk/qt4-tutorial/my-first-qt-gui-application.html.本教程中有一个小错误.虽然它添加了一个组合框条目,但未设置文本.有人可以告诉我如何正确初始化组合框.
另外,有人可以指出我是否有更好的学习Qt的教程?
我已经使用离线安装程序安装了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'
有人可以弄清楚这是什么错误以及如何解决它.谢谢.
我正在使用一个名为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)
编译没有错误,但在尝试显示为上面显示的盐时返回一个空字符串.我做错了什么或如何正确地进行转换.任何帮助或建议将受到高度赞赏.
为什么这个应用程序崩溃新线程开始,请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类访问对象.
我会清楚地解释我要做什么.
我有一个文本文件,前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个字节上提供一些随机数据.
下图显示了从同一文本文件中获取的一些读数.

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