Ошибка программы Qt - PullRequest
       3

Ошибка программы Qt

1 голос
/ 01 марта 2012

Я сделал следующую программу только для практики в 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);
}

1 Ответ

3 голосов
/ 01 марта 2012

Попробуйте следующее:

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 *) на самом деле является строкой, которая приводит к сбою вашей программы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...