添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode . Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
#include "myClass.h"
atpCommandsProcessing::atpCommandsProcessing(QObject *parent) : QObject(parent) {
void atpCommandsProcessing::startAll() {
	initServer(); //start the server and some other stuff here
void atpCommandsProcessing::quitApp() {
	emit quit();
void myClass::initServer() {

and as soon as my main.cpp becomes like that

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
	myClass myComPro;
	myComPro.startAll();
    return a.exec();

after that my servers start but shortly after is destroyed.. why??? I think that my class is not in the event loop?? I wish to be like mainwindow class for the GUI sistem.. how can I do that?? to have a main window where to process everything and that not to be in main.cpp
is that possible in Qt?? - hope it is...
any advice??

Many thanks

Yes it is possible and your code looks correct, at least the part that you have shared.

Some things to remember:

  • even loop starts in a.exec(). It is not running yet when you call myComPro.startAll()
  • if you want to start your code after even loop, use QTimer::singleShot(0, [&myComPro]() {myComPro.startAll()})
  • app won't quit until you stop the even loop (a.quit())
  • @sierdzio actually how does QCoreApplication behave, on default, when no Widget is opened before the event loop?

    I would assume, lastWindowClosed() is emitted. -> closing the application ?

    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct

    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    @J.Hilk said in a main window class for console app - non GUI:

    I would assume, lastWindowClosed() is emitted. -> closing the application ?

    Q Core Application ;-) No such signal there.

    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct

    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    @sierdzio said in a main window class for console app - non GUI:

    Yes it is possible and your code looks correct, at least the part that you have shared.

    Some things to remember:

  • even loop starts in a.exec(). It is not running yet when you call myComPro.startAll()
  • if you want to start your code after even loop, use QTimer::singleShot(0, [&myComPro]() {myComPro.startAll()})
  • app won't quit until you stop the even loop (a.quit())
  • I've just tried that and is giving me this

    QEventLoop: Cannot be used without QApplication
    atpTCPRunnable(0x555b6e1ba7c0) started on  QThread(0x555b6e1bae40, name = "Thread (pooled)")
    QEventLoop: Cannot be used without QApplication
    

    where should I use the Qapplication?? should I do the myComPro en extent of it??

    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct

    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    @J.Hilk yes here you have it a working one in the main.cpp

    #include <QtCore>
    #include <QCoreApplication>
    #include <QtDebug>
    #include <QFile>
    #include <QTextStream>
    #include <QtGlobal>
    #include <stdio.h>
    #include <stdlib.h>
    #include <QDebug>
    #include <atpcommandsprocessing.h>
    int main(int argc, char *argv[]) {
    	//TODO qInstallMessageHandler have to be enabled at the end
    	//	qInstallMessageHandler(myMessageOutput); // Install the handler
    	QCoreApplication::setOrganizationName("@atp@");
    	QCoreApplication::setOrganizationDomain("arsinte.co.uk");
    	QCoreApplication::setApplicationName("atpServerSmartHomeSystem");
        QCoreApplication a(argc, argv);
    //	atpCommandsProcessing myComPro;
    //	myComPro.startAll();
    	atp_Ini atpInf;
    	QHostAddress adr = QHostAddress::Any;
    	adr.setAddress(atpInf.get_ServerAddress());
    	atpTcpServer server;
    	server.setMode(static_cast<atpTcpServer::ThreadMode>( atpInf.get_ThreadMode()));
    	server.setMaxConnections(atpInf.get_maxConnections());
    	server.setConnectionTimeout(atpInf.get_timeOut());
    	server.listen(adr, atpInf.get_ServerPortNo());
    //	QTimer::singleShot(0, [&myComPro]() {myComPro.startAll();});
    //	QObject::connect(&myComPro, &atpCommandsProcessing::quit, &a, &QCoreApplication::quit);
        return a.exec();
    
    atpTcpServer server;
    

    and as soon as the function finished even the server was closed... I've moved that declaration to the h file in private declarations and everything is working perfectly....

    many Thanks to everyone - especially to @sierdzio

    God bless