Как закончить графический графический интерфейс и сделать консольную функцию (QT)? - PullRequest
1 голос
/ 10 мая 2019

Я совершенно новичок в 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: Как вызвать функцию после отображения окна?

Но я хочу завершить графическое окно и затем выполнить мой процесс.

1 Ответ

1 голос
/ 10 мая 2019

Вам нужно позвонить 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;
}
...