我为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)
{
QListWidgetItem *itm=new QListWidgetItem;
itm->setText((char*)(ui->listWidget->currentRow()));
ui->listWidget_2->addItem(itm);
}
答案 0 :(得分:3)
尝试以下方法:
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 *)实际上是否会导致程序崩溃