小编san*_*ood的帖子

如何将lambda函数排队到Qt的事件循环中?

基本上我需要在Java中完成同样的事情:

SwingUtilities.invokeLater(()->{/* function */});
Run Code Online (Sandbox Code Playgroud)

或者在javascript中这样:

setTimeout(()=>{/* function */}, 0);
Run Code Online (Sandbox Code Playgroud)

但是用Qt和lambda.所以有些伪代码:

Qt::queuePushMagic([]() { /* function */ });
Run Code Online (Sandbox Code Playgroud)

作为一个额外的复杂性,我需要这个在多线程上下文中工作.我实际上要做的是在正确的线程中自动运行某些方法.那么代码看起来如何:

SomeClass::threadSafeAsyncMethod() {
    if(this->thread() != QThread::currentThread()) {
        Qt::queuePushMagic([this]()=>{ this->threadSafeAsyncMethod() });
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

c++ lambda qt event-loop qthread

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

如何删除QString的前两个字符

我如何删除QString的前两个字符,或者如果我必须将它放在StackOverflows外行的条款中:

QString str = "##Name" //output: ##Name
Run Code Online (Sandbox Code Playgroud)

output: Name
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经使用了这段小代码:

if(str.contains("##"))
{
    str.replace("##","");
}
Run Code Online (Sandbox Code Playgroud)

..但它不起作用,因为我需要在其他一些字符串中使用"##",但不是在开头.

前两个字符可能会出现"%$""#@",这主要是我需要删除前两个字符的原因.

有任何想法吗?

c++ qstring qt replace

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

几个数据类型与Type构造函数接受相同的Type,如何获取同名的访问器?

简短:我有一个解决我的问题的方法,但它看起来有点过分,所以我想知道我是否错过了什么.

Long:我有一个2数据类型,一个Animal类型和一个Owner类型.两者都具有相同的"属性"年龄和名称.为了简单起见,我希望能够在动物和所有者上无所谓地称呼年龄和名字

type Age = Int
type Name = String

data AnimalType = Dog | Cat | Snake
 deriving (Read, Show,Eq)

--with  datatype and pattern matching
data Animal = Animal AnimalType Name Age
 deriving(Show, Eq)
name (Animal _ name _) = name 
age (Animal _ _ age) = age 
animalType (Animal animalType _ _) = animalType 

data Owner = Owner Name Age [Animal]
 deriving(Show,Eq)
name    (Owner name _      _) = name 
age     (Owner _    age    _) = age
animals (Owner …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
1
解决办法
247
查看次数

Qt定制外观和感觉?

我可以强制我的Qt应用程序使用不同的外观和感觉就像在KDE中完成一样吗?

c++ qt look-and-feel

5
推荐指数
1
解决办法
3841
查看次数

如何安全地破坏QThread?

我想QThread在Qt 5.3中正确地破坏一个.

到目前为止我有:

MyClass::MyClass(QObject *parent) : QObject(parent) {
    mThread = new QThread(this);
    QObject::connect(mThread, SIGNAL(finished()), mThread, SLOT(deleteLater()));
    mWorker = new Worker(); // inherits from QObject
    mWorker->moveToThread(mThread);
    mThread->start();
}

MyClass::~MyClass() {
    mThread->requestInterruption();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在一天结束时,我仍然得到:

QThread:线程仍在运行时被销毁

c++ qt qthread

5
推荐指数
1
解决办法
2355
查看次数

Qt QString to QByteArray and back

I have a problem with tranformation from QString to QByteArray and then back to QString:

int main() {

    QString s;

    for(int i = 0; i < 65536; i++) {
        s.append(QChar(i));
    }

    QByteArray ba = s.toUtf8();

    QString s1 = QString::fromUtf8(ba);

    if(areSame(s, s1)) {
        qDebug() << "OK";
    } else {
       qDebug() << "FAIL";
       outputErrors(s, s1);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

As you can see I fill QString with all characters that are within 16bit range. and then convert them to QByteArray (Utf8) and …

c++ qstring qt qbytearray

5
推荐指数
2
解决办法
5373
查看次数

Haskell中的多行是什么?一个操作员,一个功能,还有别的什么?

我对Haskell很新,我必须说我很困惑

我正在使用GHCi前奏曲

首先尝试创建一个阶乘

Prelude> factorial 0 = 1
Prelude> factorial n = n*factorial(n-1)
Prelude> factorial 2
*** Exception: stack overflow
Run Code Online (Sandbox Code Playgroud)

最终堆栈溢出.显然递归并没有停止.

Prelude> :t factorial
factorial :: Num t => t -> t
Run Code Online (Sandbox Code Playgroud)

然后阅读这篇文章如何在多行中的ghci中定义一个函数?

我发现我必须使用多行版本或大括号(顺便说一句,这是一个运算符吗?)

Prelude> let { fact 0 = 1 ; fact n = n * fact (n-1) }
Prelude> fact 5
120
Prelude> ::t fact
fact :: (Eq p, Num p) => p -> p
Run Code Online (Sandbox Code Playgroud)

要么

Prelude> :{
Prelude| facto 0 = 1
Prelude| facto n = …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
1
解决办法
246
查看次数

如何配置Haskell / ghci模块搜索路径?

我有第一个应用程序文件Myapp.hs

我创建了一个用于解析csv文件的模块,称为Csvparser,该模块在文件Csvparser.hs中定义。

这两个文件都在同一目录中。

我不明白如何在Myapp.hs中导入Csvparser模块

Prelude Data.Maybe Data.List Data.Time Data.Either> :load C:\Test\Haskell\MyApp.hs
[1 of 1] Compiling Main             ( C:\Test\Haskell\MyApp.hs, interpreted )

C:\Test\Haskell\MyApp.hs:5:1: error:
    Could not find module `Csvparser'
    Use -v to see a list of the files searched for.
  |
5 | import Csvparser
  | ^^^^^^^^^^^^^^^^
Failed, no modules loaded.
Prelude Data.Maybe Data.List Data.Time Data.Either>
Run Code Online (Sandbox Code Playgroud)

该模块可以独立加载并运行

Prelude Data.Maybe Data.List Data.Time Data.Either> :load C:\Test\Haskell\Csvparser.hs
[1 of 1] Compiling Csvparser        ( C:\Test\Haskell\Csvparser.hs, interpreted )
Ok, one module loaded.
*Csvparser Data.Maybe Data.List Data.Time Data.Either> …
Run Code Online (Sandbox Code Playgroud)

haskell ghci

5
推荐指数
1
解决办法
722
查看次数

如何组合std :: copy_if和std :: transform?

考虑这个代码片段:迭代第一个类型T1的一个容器,用于创建应用转换函数T1-> T2的第二个类型T2的第二个容器,但仅用于验证谓词的T1元素(T1 - > bool)

(在下面的例子中是奇数).

std::vector<int> myIntVector;
myIntVector.push_back(10);
myIntVector.push_back(15);
myIntVector.push_back(30);
myIntVector.push_back(13);

std::vector<std::string> myStringVectorOfOdd;

std::for_each(myIntVector.begin(), myIntVector.end(),
    [&myStringVectorOfOdd](int val)
{
    if (val % 2 != 0)
        myStringVectorOfOdd.push_back(std::to_string(val));

});
Run Code Online (Sandbox Code Playgroud)

我在这段代码中不喜欢的是lambda上的捕获.有没有办法结合std :: copy_if和std :: transform以更优雅和简洁的方式实现相同的结果?

c++ std

5
推荐指数
2
解决办法
789
查看次数

现代 C++:返回状态(正常/不正常)和错误(如果状态不正常)的函数的最佳方法是什么?

我们可以返回一个元组

std::pair<bool, std::string> fooFunction();
Run Code Online (Sandbox Code Playgroud)

但这使得创建返回值时代码变得多余,并强制调用者处理元组(在 c++17 中使用结构绑定很容易)

if ( okayCondition)
    return {true, {}}; 
else 
   return { false, "blabla error"};
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用

std::optional<std::string> fooFunction();
Run Code Online (Sandbox Code Playgroud)

这对于返回 bool 的现有函数很有趣,因为由于 std::optional 运算符 bool,大多数调用者不需要更新

//Legacy code ok
if (fooFunction())
Run Code Online (Sandbox Code Playgroud)

我知道一种更重的方法,一个模板化的 ReturnStatus 类,它会在调用者不测试返回状态值的情况下抛出。
还有其他方法吗?

c++ c++11

5
推荐指数
1
解决办法
169
查看次数

标签 统计

c++ ×7

qt ×5

haskell ×3

qstring ×2

qthread ×2

c++11 ×1

event-loop ×1

ghci ×1

lambda ×1

look-and-feel ×1

qbytearray ×1

replace ×1

std ×1