0

私のプロジェクトでは、2 つのボタンを持つダイアログが表示されます。誰かが「はい」を押したら、プログラムを閉じます。しかし、私はそれを機能させることができないようです。

私はこれらすべてを試しました。

qApp->exit();
qApp->quit();
QApplication::exit();
QApplication::quit();
QCoreApplication::exit();
QCoreApplication::quit();

そして、これらのどれもプログラムを閉じません。それらをmain.cppに移動しようとしましたが、閉じるためだけに2番目の関数を作成しようとしましたが、何も機能しません。

更新をチェックする以前のイベントループと何か関係がありますか? もしそうなら、私はそれを投稿します。

編集:

これが私のmain.cppと、プログラムを閉じたい関数です:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(icons);
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.checkVersion();

    return a.exec();
}

関数:

void MainWindow::checkVersion()
{
    if((version != "1.0.0") && (version != ""))//version is a string that is filled when the mainwindow first opens.
    {
        QMessageBox::StandardButton reply;
        reply = QMessageBox::question(this, "Update", "Version " + version + " is now available. Would you like to update now?\n\nOr visit http://www.youtube.com/oPryzeLP to download manually.", QMessageBox::Yes | QMessageBox::No);

        if(reply == QMessageBox::Yes)
        {
        }
        QApplication::exit();//moved out of reply just to test closing
    }
}

これは、イベント ループを含む関数です。

void MainWindow::downloadFile(const QString &url, const QString &aPathInClient)
{
    QNetworkAccessManager* m_NetworkMngr = new QNetworkAccessManager(this);
    QNetworkReply *reply = m_NetworkMngr->get(QNetworkRequest(QUrl(url)));
    QEventLoop loop;
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    QUrl aUrl(url);
    QFileInfo fileInfo=aUrl.path();

    QFile file(aPathInClient+"\\"+fileInfo.fileName());
    file.open(QIODevice::WriteOnly);
    file.write(reply->readAll());
    delete reply;
    loop.quit();
}

これは、downloadFile() を呼び出す関数です。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    downloadFile("link", "stuff");
    QFile info("stuff\\info.txt");
    if(info.open(QIODevice::ReadOnly))
    {
        QTextStream in(&info);
        while(!in.atEnd())
        {
            version = in.readLine();
            versionLink = in.readLine();
            vidLink = in.readLine();
        }
    }
    info.close();

    setCentralWidget(ui->tabWidget);
    ui->creativeFlag->setEnabled(false);
    ui->structures->setEnabled(false);
    ui->raining->setEnabled(false);
    ui->thundering->setEnabled(false);
    ui->hardcore->setEnabled(false);
    AddSlotsToGroup();
    AddBlocksToGroup();
    QPalette palette = ui->blockFrame->palette();
    palette.setColor( backgroundRole(), QColor( 139, 139, 139 ) );
    ui->blockFrame->setPalette( palette );
    ui->blockFrame->setAutoFillBackground( true );
    QPixmap map_bg(":/images/mapbg.png");
    ui->mapBgLabel->setPixmap(map_bg.scaled(224, 224, Qt::IgnoreAspectRatio, Qt::FastTransformation));
    QShortcut *returnShortcut = new QShortcut(QKeySequence("Return"), ui->tab_4);
    QObject::connect(returnShortcut, SIGNAL(activated()), ui->blockFind, SLOT(click()));
}
4

2 に答える 2