小编Jul*_*n-L的帖子

STL或Qt容器?

什么是使用Qt容器(的利弊QMap,QVector在他们的STL等价物,等等)?

我可以看到一个更喜欢Qt的理由:

  • Qt容器可以传递给Qt的其他部分.例如,它们可以用于填充a QVariant然后a QSettings(虽然有一些限制,但是/ QList和其键是字符串被接受).QMapQHash

还有别的吗?

编辑:假设应用程序已经依赖于Qt.

c++ qt stl

181
推荐指数
10
解决办法
4万
查看次数

checkSelfPermission方法在targetSdkVersion 22中不起作用

"CheckSelfPermission"方法没有按预期工作,它总是在android 6.0(Marshmallow)中返回零.因为目标sdk是22,我正在使用http Client进行网络连接.以下是代码段.

"private void insertDummyContactWrapper(){List permissionsNeeded = new ArrayList();

private void insertDummyContactWrapper() {
    List<String> permissionsNeeded = new ArrayList<String>();

    final List<String> permissionsList = new ArrayList<String>();
    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))
        permissionsNeeded.add("GPS");
    if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS))
        permissionsNeeded.add("Read Contacts");
    if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS))
        permissionsNeeded.add("Write Contacts");

    if (permissionsList.size() > 0) {
        if (permissionsNeeded.size() > 0) {
            // Need Rationale
            String message = "You need to grant access to " + permissionsNeeded.get(0);
            for (int i = 1; i < permissionsNeeded.size(); i++)
                message = message + ", " + …
Run Code Online (Sandbox Code Playgroud)

android android-permissions

41
推荐指数
3
解决办法
7万
查看次数

如何在qmake和qt5中使用-isystem(系统头文件)包含Qt的头文件?

我编译了基于Qt5的项目,并在g ++上启用了警告:

# project.pro file
QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Wconversion -Weffc++
Run Code Online (Sandbox Code Playgroud)

在编译时,Qt会产生大量警告(1000+只有一个简单的小部件),隐藏了我的代码中的警告.

如何-isystem在指定Qt的标题时告诉qmake使用开关而不是-I抑制警告?我不想关闭警告我想保留它们用于我的代码.

注意:我检查了这个问题,但它在我的情况下不起作用,它可能只适用于Qt4,我使用Qt5.

注2:这是一个公认的错误,我正在寻找一种解决方法.我使用来源5.4.1编译QMAKE的最新版本,该版本从通过系统头文件/include/usr/include作为系统头但不是Qt的头.

注3:我知道CMake可以工作,但这对我来说不是一个选择.

qt warnings qmake g++ qt5

11
推荐指数
1
解决办法
4642
查看次数

c timeval vs timespec

除了精度的差异,struct timeval和之间有什么区别struct timespec?如果我需要的精度低于μs(比如毫秒),为什么我要使用一个而不是另一个?

在我的编译器(ARM的gcc)上:

/* POSIX.1b structure for a time value.  This is like a `struct timeval' but
   has nanoseconds instead of microseconds.  */
struct timespec
  {
    __time_t tv_sec;        /* Seconds.  */
    __syscall_slong_t tv_nsec;  /* Nanoseconds.  */
  };

/* A time value that is accurate to the nearest
   microsecond but also has a range of years.  */
struct timeval
  {
    __time_t tv_sec;        /* Seconds.  */
    __suseconds_t tv_usec;  /* Microseconds.  */
  };
Run Code Online (Sandbox Code Playgroud)

随着双方__syscall_slong_t__suseconds_t定义为"长字".

c linux time

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

C++,如何优化浮点算术运算?

在x86架构上,在极限情况下测试简单的算术运算时,我观察到一种令人惊讶的行为:

const double max = 9.9e307; // Near std::numeric_limits<double>::max()
const double init[] = { max, max, max };

const valarray<double> myvalarray(init, 3);
const double mysum = myvalarray.sum();
cout << "Sum is " << mysum << endl;             // Sum is 1.#INF
const double myavg1 = mysum/myvalarray.size();
cout << "Average (1) is " << myavg1 << endl;    // Average (1) is 1.#INF
const double myavg2 = myvalarray.sum()/myvalarray.size();
cout << "Average (2) is " << myavg2 << endl;    // Average (2) is 9.9e+307 …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point optimization

10
推荐指数
1
解决办法
1234
查看次数

C++虚拟构造函数,没有clone()

我想执行指向多态类指针的STL容器的"深层副本" .

我知道Prototype设计模式,通过Virtual Ctor Idiom实现,如C++ FAQ Lite,第20.8项中所述.
它简单明了:

struct ABC // Abstract Base Class
{
    virtual ~ABC() {}
    virtual ABC * clone() = 0;
};
struct D1 : public ABC
{
    virtual D1 * clone() { return new D1( *this ); } // Covariant Return Type
};
Run Code Online (Sandbox Code Playgroud)

然后是深层复制:

for( i = 0; i < oldVector.size(); ++i )
    newVector.push_back( oldVector[i]->clone() );
Run Code Online (Sandbox Code Playgroud)

缺点

正如Andrei Alexandrescu 所述:

clone()实施必须遵循所有派生类相同的模式; 尽管它具有重复的结构,但没有合理的方法来自动定义clone() …

c++ prototype clone virtual-copy

8
推荐指数
2
解决办法
2710
查看次数

如何在Windows中获取当前用户的主目录

如何获取当前用户主目录的路径?

例如:在Windows中,如果当前用户是"访客",我需要"C:\ Users\guest"

我的应用程序将在大多数Windows版本(XP,Vista,Win 7)上运行.

c++ windows

7
推荐指数
2
解决办法
4万
查看次数

“条件安全”和“线程安全”的区别

我偶然发现了维基百科上的线程安全文章;它区分了几个安全级别,特别是:

线程安全:当多个线程同时访问时,保证实现不存在竞争条件。
有条件安全:不同的线程可以同时访问不同的对象,并且对共享数据的访问受到竞争条件的保护。

但对我来说,这两个定义看起来像是同一件事的不同表达方式。两者都保证共享数据不存在竞争条件。

有人可以解释其中的区别吗?谢谢。

language-agnostic thread-safety

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

编译器生成的抽象基类的析构函数是虚拟的吗?

class Base
{
    virtual void foo() = 0;
    //~Base();     <-- No destructor!
};
Run Code Online (Sandbox Code Playgroud)

显然,Base将得出.那么,C++是否说编译器生成的析构函数Base必须是虚拟的?

谢谢!

c++ abstract-class destructor compiler-generated

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

保存(已存在)QSetting到INI文件

我想将一个alredy-existing QSettings对象保存到一些INI文件中进行备份.

QSettings来自应用程序的全局设置,即.它可以是注册表,ini文件等.


如果有帮助,我的背景是:

class Params
{
    // All params as data members
    // ...
    void loadGlobal ()
    {
        Qettings s; // Global parameters, paths set by application
        // Fill data members: s.value (...);
    }
};

class Algo
{
    Result run (Params p)
    {
        Result r = F(p);
        return r;
    }
};

int main (...)
{
    Params p;
    p.loadGlobal ();
    Algo a;
    Result r = a.run (p);

    // At this point, save Result and Params into a …
Run Code Online (Sandbox Code Playgroud)

ini qt qsettings

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