我正在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++和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 );然后:
我有许多非常相似的函数,但使用不同数量和类型的本地对象运行:
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) 我找不到如何在 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未定义......
我正在使用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)的日志记录却没有.
有人知道如何禁用这个烦人的日志吗?
我map在一些代码中使用了一个来存储有序数据.我发现对于巨大的地图,破坏可能需要一段时间.在这段代码我有,取代map通过vector<pair>减少处理时间由10000 ...
最后,我很惊讶我决定将map表演与排序vector或比较pair.
我很惊讶,因为我无法找到的情况下map比排序的更快vector的pair(随机填充后排序)......必须有一些情况下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) 我有一个QGroupBox。根据上下文的不同,其标题可能是多余的(显示在GUI的其他位置),因此我需要使好像QGroupBox不在这里。...但是我必须保留其内容可见(所以我不想打电话QGroupBox::hide())!
我需要在运行时动态地执行此操作,并希望避免创建/销毁QGroupBox+使其内容重新父代化。
到目前为止我尝试过的是:
QGroupBox 可见:
QGroupBox::setTitle("") 删除文本。 QGroupBox::setFlat(true) 使框架成为一行。我最终得出以下结论:
还不错...但是一行仍然保留....有没有办法完全隐藏QGroupBox框架但保持其内容可见?
试图解决这个问题:C++如何防止我的团队开发人员错误地使用整数版本的abs?通过使用宏使abs功能不再可用.
如果我编译一个包含myabs(3);g ++选项的代码,-Dmyabs=abs它编译(myabs被替换为abs),很好.
现在,如果我编译一个包含abs(3);g ++选项的代码,-Dabs=forbidden它也会编译...为什么它不报告forbidden未知?在预处理期间看起来abs没有被替换forbidden...为什么?
要使用正确的数字分隔符('.' 或 ',')生成 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.
我将一些代码从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++ ×8
qt ×3
android ×1
boost ×1
c++11 ×1
ceres-solver ×1
cmake ×1
dictionary ×1
glog ×1
groupbox ×1
macros ×1
performance ×1
preprocessor ×1
stl ×1
templates ×1
vector ×1