Oppure

Loading
23/10/13 8:59
caiser
Altro problema ragazzi.

Stavo facendo alcune prove quando l'ide mi restituisce sempre questo errore dal momento che tento
di aprire una nuova window.

MainForm.h


public slots:

void about();





MainForm.cpp


#include "About.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->action_About(),SIGNAL(trigged()),SLOT(about()));

}



void about()
{
 //in questo modo

  About t;
  t.ShowNormal();


 //O in quest'altro modo
  About *t = new About();
  t->ShowNormal();
 


}



In entrambi i modi ottengo l'errore "Segmentantion Fault"


Errore Assembly

0x6b937484 <+0x0000> (QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const&;)+9>:    call 0x6ba1baec <QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::data() const>

Come mai questo problema?
aaa
26/10/13 17:25
Phi
Non capisco bene che cosa tu voglia fare, ne che cosa sia la classe "About".
Sarebbe meglio se scegliessi un titolo migliore per il topic e dicessi che stai lavorando con Qt.

Non ho ipotesi riguardo il motivo del Segmentation Fault (penso risieda in About.h o About.cpp), ma qualcosa posso già dirti:
void about()
{
  About t;
  t.ShowNormal();
}

Questa funzione non penso funzionerà anche dopo che avrai fixato l'errore. Infatti crea un'istanza della classe About, la mostra, poi la funzione termina e la classe viene distrutta. Quindi vedrai la finestra per qualche centesimo di secondo, poi sparirà.

void about()
{
 About *t = new About();
  t->ShowNormal();
}

Questa funzione non ha il problema della precedente (il variabile rimane in memoria anche dopo il termine della funzione). Tuttavia così perdi ogni traccia della variabile creata. Se hai implementato in About una "autodistruzione" dopo la chiusura della finestra allora va bene, altrimenti la variabile continuerà ad occupare memoria inutilmente.

Comunque, SE About è un Qdialog che deve mostrare delle informazione sull'applicazione, ALLORA ti consiglio di scrivere così:
void about()
{
  About aboutdialog;
  aboutdialog.exec();
}
Ultima modifica effettuata da Phi 26/10/13 17:29
aaa