我的问题分为两部分:
mainWindow
是否在运行main()?#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
如何不会立即超出范围?在下面的示例中,创建一个窗口,显示,并且main几乎立即返回。
的main.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
mainwindow.cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.h
#-------------------------------------------------
#
# Project created by QtCreator 2016-05-23T10:55:03
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MainWindowExample
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
MainWindowExample.pro
static void Main(string[] args)
{
foreach (var results in BruteForce())
{
Console.WriteLine(results);
}
}
public static IEnumerable<String> BruteForce()
{
const int firstLetter = 'A';
const int lastLetter = 'Z';
for (var firstPos = firstLetter; firstPos <= lastLetter; firstPos++)
{
for (var secondPos = firstLetter; secondPos <= lastLetter; secondPos++)
{
for (var thirdPos = 0; thirdPos <= 9; thirdPos++)
{
for (var fourthPos = firstLetter; fourthPos <= lastLetter; fourthPos++)
{
for (var fifthPos = firstLetter; fifthPos <= lastLetter; fifthPos++)
{
for (var sixthPos = 0; sixthPos <= 9; sixthPos++)
{
for (var sevethPos = firstLetter; sevethPos <= lastLetter; sevethPos++)
{
for (var eighthPos = 0; eighthPos <= 9; eighthPos++)
{
yield return
String.Join(string.Empty,
(char) firstPos,
(char) secondPos,
thirdPos,
(char) fourthPos,
(char) fifthPos,
sixthPos,
(char) sevethPos,
eighthPos);
}
}
}
}
}
}
}
}
}
答案 0 :(得分:5)
debutpos = contentu.find(debut)
# ...
finpos = contenu.find(fin, debutpos)
mainWindow
事件循环在mainWindow
范围内执行 - 它会一直阻塞,直到应用程序退出(例如 - 上一个顶级窗口关闭)。所以a.exec()
不会超出范围,因为mainWindow
执行所有内容。
使用以下代码检查:
main
来自QApplication doc:
进入主事件循环并等待直到调用exit(),然后返回设置为exit()的值(如果通过quit()调用exit(),则返回0)。
答案 1 :(得分:1)
main()
的线程以外的线程中生成?没有。事实上,这样做是不明确的行为。您只能在主线程中构造QWidget
个后代。
Threads and Objects文档主题涵盖了:
虽然QObject是可重入的,但GUI类,尤其是QWidget及其所有子类,都不是可重入的。它们只能在主线程中使用。如前所述,还必须从该线程调用QCoreApplication :: exec()。*
main()
返回时,mainWindow如何不会立即超出范围?但确实如此!
main()
返回时返回 a.exec()
,只有当您退出应用程序时才会发生这种情况。默认情况下,当最后一个可见窗口关闭时,您的应用程序会自动退出。