내 프로젝트에는 두 개의 버튼이있는 대화 상자가 있습니다. 누군가 "예"를 누르면 프로그램을 닫고 싶습니다. 그러나 나는 그것이 작동하도록 할 수 없습니다.GUI 프로그램을 닫을 수 없습니다.
나는이 모든 것을 시도했다.
qApp->exit();
qApp->quit();
QApplication::exit();
QApplication::quit();
QCoreApplication::exit();
QCoreApplication::quit();
그리고 이들 중 어느 것도 프로그램을 닫지는 않습니다. 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
}
}
이가 들어있는 기능입니다 여기
내 MAIN.CPP 나는 내 프로그램을 종료 할 수있는 기능입니다 이벤트 루프 :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을 (호출 기능)입니다 : 당신이 종료 Qt는 이벤트 루프 목록
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()));
}
문제를 재현하는 최소 테스트 사례를 게시하십시오. 모든 코드를 하나의 파일 (main.cpp, 클래스 선언 및 구현 모두)에 넣습니다. 'Q_OBJECT' 매크로가있는 경우 끝에 main.moc "를'#include 할 수 있습니다. –
dialog.exec() 전에 app.exec()를 호출하거나 main()에 직접 열리는 대화 상자입니까? –
게시물을 main.cpp로 업데이트하고 닫을 위치를 함수로 지정합니다. – mrg95