小编emK*_*oly的帖子

非Qt应用程序中基于Qt的DLL中的事件循环

我在整个网络上搜索答案,但没有找到我的问题的解决方案.或许我做了,但因为我是C++/programming/Qt的初学者,我不理解它们.最接近的问题是在非Qt应用程序中使用基于Qt的DLL.我试图使用这种方法,但到目前为止还没有成功.

我尝试创建一个DLL,它是我们的USB设备的API.该库也应该适用于非Qt应用程序.我有PIMPL-ed所有Qt的东西和私有类,所以下面的代码是公共类下的一层.我正在使用QSerialPort和大量的SIGNAL/SLOT,所以我需要QCoreApplications事件循环.ReaderSerial是Qt开始的地方,它还实例化另一个QSerialPort在不同QThread中运行的类.

此时我的问题是整个事情在崩溃时崩溃:"QTimer只能用于以QThread启动的线程"

我想我的基于Qt的类如ReaderSerial不会"看到"QCoreApp事件循环或类似的东西.所以我的问题是如何为我的DLL提供QCoreApplication事件循环,所以我创建的所有基于Qt的类都可以工作,我将能够从我的DLL调用方法.

非常感谢您的回答.

reader_p.h

class ReaderPrivate
{
public:
   ReaderPrivate();
   ~ReaderPrivate();

   void static qCoreAppExec();

   ReaderSerial *readerSerial;

   void connectReader(std::string comPort);
   void disconnectReader();
};
Run Code Online (Sandbox Code Playgroud)

reader.cpp

// Private Qt application
namespace QAppPriv
{
    static int argc = 1;
    static char * argv[] = {"API.app", NULL};
    static QCoreApplication * pApp = NULL;
};

ReaderPrivate::ReaderPrivate()
{
    std::thread qCoreAppThread(qCoreAppExec);
    qCoreAppThread.detach();

    readerSerial = new ReaderSerial;
}

ReaderPrivate::~ReaderPrivate()
{

    delete readerSerial;

}

void ReaderPrivate::qCoreAppExec()
{
    if (QCoreApplication::instance() == NULL)
    {
        QAppPriv::pApp = new QCoreApplication(QAppPriv::argc, QAppPriv::argv); …
Run Code Online (Sandbox Code Playgroud)

c++ dll qt event-loop

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

Android NDK:如何使用 minimumSdkVersion = 19 为 ARM64-v8a 构建

我有一个 Android 库项目,它通过 Android NDK 在 C/C++ 中有一部分。我想为所有架构构建我的本机代码。如果我设置minSdkVersion为 21,则一切正常。但minSdkVersion如果我将minSdkVersionARM64-v8a 版本设置为 19,则我需要更低(SDK 19)。我知道没有运行 SDK 19 的 ARM64-v8a 设备。我如何才能实现在一个 APK 中构建所有平台并拥有minSdkVersion19 个?

c++ android abi gradle android-ndk

4
推荐指数
1
解决办法
9074
查看次数

如何修改lambda函数内的变量?

我想做这样的事情:

def myFunc(y):
    aVariable = "a"
    bVariable = "b"
    y(aVariable,bVariable)

def main():
    myFunc(lambda a,b: a+=b)
Run Code Online (Sandbox Code Playgroud)

并期望输出"ab".

相反,我收到以下错误:

File "<stdin>", line 7
  myFunc(lambda x, y: x += y)
                        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

python lambda python-3.x

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

如何从Gradle实验性插件中的任务访问versionCode

我想从gradle任务中访问defaultConfig中的versionCode和versionName。我正在使用实验性gradle插件。我尝试了model.android.defaultConfig.versionCode,但它无法识别android ...

apply plugin: 'com.android.model.application'

apply from: "../config.gradle"
apply from: "../gitversion.gradle"
def config = ext.configuration

model {
    android {
        compileSdkVersion = config.compileSdkVersion
        buildToolsVersion = config.buildToolsVersion

        defaultConfig {
            applicationId = 'eu.tss.apitest'
            minSdkVersion.apiLevel = config.minimumSdkVersion
            targetSdkVersion.apiLevel = config.targetSdkVersion
            defaultConfig {

            versionCode = 1
            versionName = '1.0'
            ext.printVersions(versionCode,versionName)
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file('proguard-android.txt'))
            }
        }

    }
   android.lintOptions {

        abortOnError false
    }
}

dependencies {
    println rootProject.getName()
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile project(':tssapiandroid')
    compile project(path: ':tssuielements')
}

task printVersions{

    //I would like to …
Run Code Online (Sandbox Code Playgroud)

groovy android gradle gradle-experimental

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

获取当前文件夹中可执行文件的路径 C++

我正在尝试获取该程序所在文件夹中 exe 文件的路径。但我不知道该怎么做,我做了类似的事情,但它只获取当前的程序路径,而且我不知道如何替换我的程序和我想要获取路径的程序之间的文件名。

所以你能简单地帮助我在该程序所在的同一文件夹中获取 exe 的路径(我知道该 exe 的名称)...

    char fullp[MAX_PATH];
    char selfp[MAX_PATH] = "..//myprogram.exe"; 
    char otherprogram[MAX_PATH] = "//test.exe";

    DWORD szPath;
    szPath = GetModuleFileName(NULL, selfp, sizeof(selfp));
Run Code Online (Sandbox Code Playgroud)

c++ winapi path

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