小编jpo*_*o38的帖子

如何防止Android设备从Qt应用程序进入休眠状态

我正在Android上部署Qt应用程序,需要防止设备进入待机状态(否则,我的线程被中断,我的BLE连接也会丢失).

我在SO上发现:如何阻止Android设备以编程方式进入睡眠状态?

应该执行这个Java代码:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();
Run Code Online (Sandbox Code Playgroud)

但是如何在我的Qt应用程序中实现它?

c++ qt android

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

我应该使用哪种助推器来存储人类年龄

我必须存储用户的年龄(年,月,日......可能是小时,分钟,秒).我正在使用C++和boost.

我不确定我应该使用哪类boost::posix_time(或boost::date_time).

我试过了boost::posix_time::time_duration,但这并不明显,因为没有构造函数计算一年,只有几个小时,所以我做了:

boost::posix_time::time_duration age = boost::posix_time::hours(24*365*ageInYears);
Run Code Online (Sandbox Code Playgroud)

但我不确定这是一个好策略,因为所有年份都没有365天;-)

我也尝试过boost::gregorian::date,但这很棘手,因为这个版本不允许year在1400之前存储(这会存储日期,而不是持续时间).

  • 我不想存储用户的出生日期,因为我需要在我的程序运行时存储它的年龄(医疗数据).
  • 我不想存储常规int因为它不够准确(24岁+ 11个月差不多25岁).
  • 我不想存储一个,float因为我不想重新发明轮子与浮动到年龄转换我将不得不做...

真的没有课程可以很容易地存储多年,并且可选择一些月份和日期来提升吗?

理想情况下,对于一个30岁半的人,我希望能够创建一个这样的对象:boost::....... theAge( 30, 6, 0 );然后:

  • 有一个年龄的功能:theAge.years()返回30(忽略几个月)
  • 可能有一个转换浮动,这将给我30.5作为一个年龄

c++ boost

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

如何迭代可变参数模板参数来创建可变数量的局部变量?

我有许多非常相似的函数,但使用不同数量和类型的本地对象运行:

template <class T> T* create1( const std::vector<std::string>& names )
{
    A a( names[0] );
    B b( names[1] );
    C c( names[2] );

    if ( a.valid() && b.valid() && c.valid() )
        return new T( a, b, c );
    else
        return NULL;
}

template <class T> T* create2( const std::vector<std::string>& names )
{
    D d( names[0] );
    E e( names[1] );

    if ( d.valid() && e.valid() )
        return new T( d, e );
    else
        return NULL;
}

create1<ABC>( { "nameA", "nameB", …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

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

如何使用 CMake 声明像宏这样的函数

我找不到如何在 CMake 中声明像宏这样的函数。

我需要一个宏函数,如:

#define MYFUNC(foo) QString( foo + "_suffix" )
Run Code Online (Sandbox Code Playgroud)

由我的 CMakeLists.txt 文件定义。我试过:

add_definitions("-DMYFUNC(foo)=QString\(foo+\"_suffix\"\)")
Run Code Online (Sandbox Code Playgroud)

add_definitions("-DMYFUNC\(foo\)=QString\(foo+\"_suffix\"\)")
Run Code Online (Sandbox Code Playgroud)

但没有工作,编译器(VS2015)总是报告MYFUNC未定义......

macros preprocessor cmake

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

Ceres Solver:无法禁用日志记录(google glog)

我正在使用ceres求解器进行项目,当我调用该ceres::Solve函数时,库开始输出如下这样的行:

iterative_schur_complement_solver.cc:88 No parameter blocks left in the schur complement.
wall_time.cc:74 

IterativeSchurComplementSolver::Solve
                                   Delta   Cumulative
                           Total :    0.00001      0.00001
Run Code Online (Sandbox Code Playgroud)

我试图禁用这些中间步骤的记录,但到目前为止我没有成功.我在我班级的构造函数中调用这一行:

google::InitGoogleLogging("my-project");
Run Code Online (Sandbox Code Playgroud)

我调用求解器时设置的选项是:

ceres::Solver::Options options;
options.preconditioner_type = ceres::SCHUR_JACOBI;
options.linear_solver_type = ceres::ITERATIVE_SCHUR;
options.logging_type = SILENT;
options.minimizer_progress_to_stdout = false;
ceres::Solver::Summary summary;
ceres::Solve(options, &problem, &summary);
Run Code Online (Sandbox Code Playgroud)

在我看来,ceres日志记录被有效禁用,但其依赖库(即:SuiteSparse)的日志记录却没有.

有人知道如何禁用这个烦人的日志吗?

c++ least-squares glog ceres-solver

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

我的哪种情况std :: map <A,B>比排序的std :: vector <std :: pair <A,B >>更快?

map在一些代码中使用了一个来存储有序数据.我发现对于巨大的地图,破坏可能需要一段时间.在这段代码我有,取代map通过vector<pair>减少处理时间由10000 ...

最后,我很惊讶我决定将map表演与排序vector或比较pair.

我很惊讶,因为我无法找到的情况下map比排序的更快vectorpair(随机填充后排序)......必须有一些情况下map是快....还有什么是在提供这种类别的点?

这是我测试的:

测试一,比较map填充和破坏与vector填充,排序(因为我想要一个已分类的容器)和销毁:

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <map>
#include <vector>
#include <algorithm>

int main(void)
{

    clock_t tStart = clock();

    {
        std::map<float,int> myMap;
        for ( int i = 0; i != 10000000; ++i )
        {
            myMap[ ((float)std::rand()) / RAND_MAX ] = i;
        }
    }

    std::cout << "Time taken by map: " …
Run Code Online (Sandbox Code Playgroud)

c++ performance dictionary vector

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

您可以隐藏QGroupBox框架,但保留其可见的内容吗?

我有一个QGroupBox。根据上下文的不同,其标题可能是多余的(显示在GUI的其他位置),因此我需要使好像QGroupBox不在这里。...但是我必须保留其内容可见(所以我不想打电话QGroupBox::hide())!

我需要在运行时动态地执行此操作,并希望避免创建/销毁QGroupBox+使其内容重新父代化。

到目前为止我尝试过的是:

QGroupBox 可见:

在此处输入图片说明

  • QGroupBox::setTitle("") 删除文本。
  • QGroupBox::setFlat(true) 使框架成为一行。

我最终得出以下结论:

在此处输入图片说明

还不错...但是一行仍然保留....有没有办法完全隐藏QGroupBox框架但保持其内容可见?

qt groupbox

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

无法使用预处理程序语句禁止使用标准函数?

试图解决这个问题:C++如何防止我的团队开发人员错误地使用整数版本的abs?通过使用宏使abs功能不再可用.

如果我编译一个包含myabs(3);g ++选项的代码,-Dmyabs=abs它编译(myabs被替换为abs),很好.

现在,如果我编译一个包含abs(3);g ++选项的代码,-Dabs=forbidden它也会编译...为什么它不报告forbidden未知?在预处理期间看起来abs没有被替换forbidden...为什么?

c++ c-preprocessor

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

如何使用STL获取系统的十进制分隔符?

要使用正确的数字分隔符('.' 或 ',')生成 csv 文件,因为我希望它们与机器上安装的 Excel 版本兼容,我需要从 C++ 程序中获取小数分隔符。

我的机器有法语版的 Windows/Excel,所以小数点分隔符是 ','。

int main()
{
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出.,这是不期望的

我尝试使用 WIN32 API:

int main()
{
    TCHAR szSep[8];
    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szSep, 8);
    std::cout << szSep;
}
Run Code Online (Sandbox Code Playgroud)

输出,,这是预期的。

GetLocaleInfo在 STL 中是否有任何等效于此函数的函数可以在简单的main.

c++ stl

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

为什么我得到QWindowsWindow :: setGeometry:无法使用Qt 5.12.0设置几何警告

我将一些代码从Qt 5.6.0迁移到5.12.0。令人惊讶的是,我收到许多有关的警告QWindowsWindow::setGeometry。每当一个对话框显示在另一个对话框的顶部时,都会收到此警告。

我可以在MCVE中隔离问题,它非常简单且最小,所有育儿效果都不错,但是,按下按钮时会收到警告:

QWindowsWindow::setGeometry: Unable to set geometry 132x30+682+303 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry:  132x42+682+303 (frame: 4, 28, 4, 4, custom margin: 0, 0, 0, 0, minimum size: 116x42, maximum size: 16777215x16777215).
Run Code Online (Sandbox Code Playgroud)

main.cpp:

#include <QApplication>
#include "mainframe.h"
#include <qDebug>

void MessageOutput( QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    qDebug() << msg;
}

int main( int argc, char* argv[] )
{
    QApplication app(argc, argv);

    qInstallMessageHandler(MessageOutput);

    MainFrame wnd;
    wnd.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

mainframe.h:

#include <QMainWindow>

class QPushButton;
class MainFrame …
Run Code Online (Sandbox Code Playgroud)

c++ qt

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