Domanda

Ho un problema, sto chiamando il mio qdialog come questo nel principale ():

app.setQuitOnLastWindowClosed(true);
splashWin startWin;

if(!startWin.exec())
{
    // Rejected
    return EXIT_SUCCESS;
}

// Accepted, retrieve the data
startWin.myData...
.

E in QDialog ho il seguente codice:

splashWin::splashWin(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::splashWin)
{
    ui->setupUi(this);
    this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
    this->setAttribute(Qt::WA_QuitOnClose);
}

void splashWin::on_OK_clicked()
{
    // Prepare my data
    ..


    accept();
}


void splashWin::show_About_Window()
{
    MyAboutWindow win;
    setVisible(false); // <- this causes the application to send a "reject" signal!! why??
    win.exec();
    setVisible(true);
}
.

È un codice piuttosto semplice, il problema è: la linea Secondible (False) o Hide () () mostra la finestra sulla finestra ma non appena quella finestra viene spegnisata un codice di dialogo "Rifiuta" viene inviata e la mia applicazione chiude l'esecuzione del .

// Rejected
return EXIT_SUCCESS;
.

Linee del principale ()

Perché è quello?Nella documentazione ho letto quella nascondi () non dovrebbe restituire nulla.Sto usando Qt 4.8.2

È stato utile?

Soluzione

QDialog::setVisible(false) interrompe il proprio loop per eventi, ma è possibile chiamare esplicitamente la versione della classe base della funzione, QWidget::setVisible, invece per evitare quel comportamento:

void splashWin::show_About_Window()
{
    MyAboutWindow win;
    QWidget::setVisible(false);
    win.exec();
    setVisible(true);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top