如何结束图形GUI和控制台功能(QT)?

时间:2019-05-10 09:17:52

标签: c++ qt qeventloop

我对QT完全陌生,我想准备一个窗口并从用户那里获取一些输入,然后使用此输入运行一个控制台并在控制台中显示输出。我试图在exec之后编写代码,但似乎不可能:

int main(int argc, char *argv[])
{
    int retmain = 0;
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    cout<<"pos500"<<endl;
    retmain = a.exec();
    cout<<"pos50"<<endl;
//doing something

    return retmain;
}

我不知道为什么,但是在a.exec()之后;什么都没发生。 所以我在互联网上搜索,然后在stackoverflow中找到以下主题: How to call function after window is shown?

但是我想结束图形窗口,然后执行我的过程。

1 个答案:

答案 0 :(得分:1)

您需要致电QCoreApplication::exit()才能使exec拥有控制权。

  

调用此函数后,应用程序离开主事件循环,并从调用返回exec()。 exec()函数返回returnCode。如果事件循环未运行,则此功能不执行任何操作。

一个简单的例子是:

//mainwindow.h
//////////////////////////////////////////////////
#pragma once
#include <QtWidgets/QMainWindow>
#include <QtCore/QCoreApplication>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    void closeEvent(QCloseEvent *event);
    ~MainWindow();
};

//mainwindow.cpp
//////////////////////////////////////////////////
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}
void MainWindow::closeEvent(QCloseEvent *event)
{
    QCoreApplication::exit(0);
    QMainWindow::closeEvent(event);
}
MainWindow::~MainWindow(){}

//main.cpp
//////////////////////////////////////////////////
#include "mainwindow.h"
#include <QApplication>

#include <iostream>

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

    a.exec();
    std::cout << "test" << std::endl;
    return 0;
}