Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt程序错误_C++_Qt - Fatal编程技术网

C++ Qt程序错误

C++ Qt程序错误,c++,qt,C++,Qt,我制作以下程序只是为了在Qt中练习。当我单击Listwidget中的某个项目,使该项目的行号成为Listwidget_2中的项目时,我的程序崩溃。这是代码。MainWindow.h与Qt IDE生成的相同(未做任何更改,所有函数都是预定义的,已在.cpp文件中使用)。如果我是初学者,请通知我程序中是否有内存泄漏 谢谢你的帮助 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #incl

我制作以下程序只是为了在Qt中练习。当我单击Listwidget中的某个项目,使该项目的行号成为Listwidget_2中的项目时,我的程序崩溃。这是代码。MainWindow.h与Qt IDE生成的相同(未做任何更改,所有函数都是预定义的,已在.cpp文件中使用)。如果我是初学者,请通知我程序中是否有内存泄漏

谢谢你的帮助

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
     ui->setupUi(this);
    noofitems=0;
    files.setFileName("E:/filev.txt");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionDelete_Item_triggered()
{

      qDeleteAll(ui->listWidget->selectedItems());
}

void MainWindow::on_okbutton_clicked()
{
    QListWidgetItem *item=new QListWidgetItem;

    item->setText(ui->lineEdit->text());
    ui->listWidget->addItem(item);
    noofitems++;

    writefile();
}

void MainWindow::writefile()
{
    QFile files("E:/legitfile.txt");

    if(files.exists())
    {
        if(!files.open(QFile::Append | QFile::Text))
        {
            QMessageBox::warning(this,"File Access!!!","The File containing data of the         Items and Comments can't be acessed",QMessageBox::Ok);
        }
    }else
        if(!files.open(QFile::WriteOnly | QFile::Text))
        {
            QMessageBox::warning(this,"File Access!!!","The File containing data of the     Items and Comments can't be acessed",QMessageBox::Ok);
        }

    QTextStream out(&files);
    out<< noofitems<<',';

    files.flush();
    files.close();
}
请尝试以下操作:

void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
     Q_ASSERT( ui );
     Q_ASSERT( ui->listWidget );
     Q_ASSERT( ui->listWidget_2 );

     QListWidgetItem *itm=new QListWidgetItem;
     itm->setText( QString::number( ui->listWidget->currentRow() ) );
     ui->listWidget_2->addItem(itm);
}
如果触发任何断言,则表示未初始化
ui
ui->listWidget
ui->listWidget_2
列表。
还要注意我是如何更改将
currentRow()
转换为数字的行的。这更具可读性,而且我不确定将行转换为(char*)是否确实是导致程序崩溃的行

您应该添加调试输出,以查看它在哪一行崩溃。如何在通知的程序中执行此操作。我试过了,但是程序没有编译一个include
#include
,然后执行,例如
qDebug(),程序编译得很好,但是当我在listwidget中单击添加的项时,程序崩溃了很多先生,程序因为类型转换char*而崩溃了。这背后的原因是什么。愿上帝保佑你。我讨厌那些只会降低开始者排名的人,这样他们就不会问问题,也不会受到惩罚。如果你把一个整数,例如5转换成char*,你就不会得到可读的字符“5”,而是ASCII码5中的任何字符。如果需要“5”,则必须将53转换为char*,因为字符串文字“5”具有ASCII代码。长话短说,只需使用
QString::number()
QString::arg()
QString.toInt()
进行Qt的数字字符串转换,您不必关心ASCII等。您无法通过强制转换将int转换为char*字符串,您需要一个特定的函数,如atoi或QString::number()。强制转换将使任何使用char*的函数将int解释为4个字符,然后可能会继续读取int之后的(可能无效)内存(这实际上是正确的。我认为我描述的是将
int
强制转换为
char
(与
char*
相反)
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
     Q_ASSERT( ui );
     Q_ASSERT( ui->listWidget );
     Q_ASSERT( ui->listWidget_2 );

     QListWidgetItem *itm=new QListWidgetItem;
     itm->setText( QString::number( ui->listWidget->currentRow() ) );
     ui->listWidget_2->addItem(itm);
}