标签: qcoreapplication

抑制警告"未在main()线程中创建QApplication"

我已经创建了一个基于Qt的网络库,用于没有运行Qt事件循环的应用程序,而且不一定是Qt应用程序.这是通过QCoreApplication在每个答案的线程中创建一个实例来实现的.是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?

这很好用,但它让Qt不高兴(我认为我担心我会尝试在主线程之外操作一个不起作用的GUI,但我不是),所以它会打印一个警告:WARNING: QApplication was not created in main() thread.

我想要压制那些否则将被打印到X11控制台的警告,并且最有可能导致我的用户输入一堆不必要的缺陷.但是,我只想压制这个错误,因为我qDebug出于某些合法目的使用并希望看到未来的警告.有没有办法做到这一点,就像某种Qt #pragma

编辑:

在此之前提出了类似的问题:Qt控制台应用程序"警告:QApplication不是在main()线程中创建的",但答案基本上只是一个代码审查,没有任何有意义的想法来抑制警告.

c++ qt suppress-warnings qcoreapplication

8
推荐指数
1
解决办法
7843
查看次数

Qt qDebug不使用QConsoleApplication或QApplication

在使用Qt和Qt Creator开发程序时,我目前遇到了非常烦人的问题.每当我尝试使用qDebug()一个QCoreApplicationQApplication使用前实例化qDebug(),没有任何输出,无论我在Qt Creator中或从一个普通的shell运行程序(我使用Fedora Linux系统的BTW).例如,即使是以下简单代码也会失败:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "TestOutput!" << endl;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道该怎么办这个问题?先谢谢,马吕斯

c++ qt qdebug qcoreapplication qapplication

6
推荐指数
2
解决办法
5042
查看次数

QT5 错误:未知类型名称“QCoreApplication”。Qt5 中的第一个程序

我刚刚在 Linux Ubuntu 20.04 LTS 中安装了 QTCreator,单击“文件”->“新建项目”->“应用程序”->“QTConsole 应用程序”。制作了first.pro 文件和main.cpp 文件。

第一个.pro 包含:

QT -= gui declarative
QT += widgets

CONFIG += c++11 console
CONFIG -= app_bundle

DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += \
        main.cpp

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Run Code Online (Sandbox Code Playgroud)

main.cpp 包含:

 #include <QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

错误出现在 QCoreApplication 行中。

c++ user-interface qt5 qcoreapplication qapplication

3
推荐指数
1
解决办法
4335
查看次数

正确关闭QCoreApplication的方法

我正在制作一个Qt5 QCoreApplication,用于从FTP服务器下载文件(从HTTP开始,现在已经切换).

我的程序要关闭时遇到问题.之后,我加入exit(0)downloader.cpp我的计划现已结束,但我得到了以下错误:

QWaitCondition:线程仍在等待时被破坏.

我的代码如下:

main.cpp

#include <QCoreApplication>
#include <downloader.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Downloader d;
    d.doDownload();

    a.exec();
}


**downloader.cpp**

#include "downloader.h"

Downloader::Downloader(QObject *parent) :
    QObject(parent)
{
}

void Downloader::doDownload() {

manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("ftp://ftp.fao.org/Public/GIEWS/windisp/40manual/wd4en.pdf")));
}


void Downloader::replyFinished (QNetworkReply *reply)
{

    if(reply->error()) {
        qDebug() << "ERROR!";
        qDebug() << reply->errorString();
    }
    else

    {
        qDebug() << "Download finished!";

        QFile *file = new QFile("C:/Users/jelicicm/Desktop/wd4en.pdf");

        if(file->open(QFile::Append))
        {
            file->write(reply->readAll());
            file->flush(); file->close(); …
Run Code Online (Sandbox Code Playgroud)

ftp qt download qt5 qcoreapplication

2
推荐指数
1
解决办法
7104
查看次数

请首先实例化QApplication对象

我有一个静态类,希望它有静态QSettings.但是在初始化时我得到一个警告:

QSettings* MySQLConnection::settings = new QSettings(QApplication::applicationDirPath() + "/config.ini", QSettings::IniFormat);
Run Code Online (Sandbox Code Playgroud)

QCoreApplication :: applicationDirPath:请首先实例化QApplication对象

作为一种解决方法,我QSetting在主函数的开头手动初始化.有没有更好的方法来初始化我的静态成员?

谢谢!

c++ qt static-members qcoreapplication qapplication

2
推荐指数
1
解决办法
8084
查看次数

为什么 input() 会导致“QCoreApplication::exec: 事件循环已在运行”?

我遇到了这个 QCoreApplication 问题,其中在 QObject 在 QThread 内完成执行后调用 input() 会导致无限循环打印到控制台“QCoreApplication::exec: 事件循环已在运行”。

在代码中,我创建了一个通用worker作为QObject,将其移动到QThread中(使用QThread的认可方式,而不是子类化它),然后在通用worker内执行另一个QObject(主类)函数。只要我在执行 Master 后不调用 input() ,一切就可以正常工作。请注意,如果我直接在工作线程中执行函数(而不是主实例的函数),也会出现问题。

这是重现该问题的示例代码:

import sys
from PyQt4.QtCore import QCoreApplication, QObject, QThread, pyqtSignal, pyqtSlot


class Worker(QObject):
    """
    Generic worker.
    """
    start = pyqtSignal(str)
    finished = pyqtSignal()

    def __init__(self, function):
        QObject.__init__(self)
        self._function = function
        self.start.connect(self.run)

    def run(self):
        self._function()
        self.finished.emit()


class Master(QObject):
    """
    An object that will use the worker class.
    """
    finished = pyqtSignal()

    def __init__(self):
        QObject.__init__(self)

    @pyqtSlot()
    def do(self):
        print("Do what?")
        self.finished.emit()


def done():
    # FIXME This will …
Run Code Online (Sandbox Code Playgroud)

python multithreading input pyqt4 qcoreapplication

2
推荐指数
1
解决办法
5342
查看次数