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

Posted

技术标签:

【中文标题】如何结束图形 GUI 并执行控制台功能(QT)?【英文标题】:How to end graphic GUI and do console function(QT)? 【发布时间】:2019-09-28 04:15:03 【问题描述】:

我对 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(); 之后什么都没发生。 所以我在互联网上搜索并在***中找到了以下主题: How to call function after window is shown?

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

【问题讨论】:

Qt 建议不要在QApplication::exec() 之后运行任何代码,因为它可能不会总是返回。似乎 QDialog 不是您想要的,而不是 QMainWindow 并调用 exec 。您还可以覆盖主窗口的 close event 并从那里启动您的计算。 如果 a.exec() 没有显示您的 MainWindow w (正如您所说的,没有任何反应)。那么我认为控制台输出不是你的问题! 如果将MainWindow 替换为QWidget 会发生什么情况,然后会出现窗口吗?关闭该窗口后它会打印您的输出吗? 【参考方案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;

【讨论】:

以上是关于如何结束图形 GUI 并执行控制台功能(QT)?的主要内容,如果未能解决你的问题,请参考以下文章

qt是啥意思是

qt如何解决线程空转的问题

如何在linux平台上将控制台输出重定向到qt中的GUI

四则运算图形化

如何在 qt 中为 GUI 添加可点击按钮

QT 从入门到放弃