如何结束图形 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)?的主要内容,如果未能解决你的问题,请参考以下文章