小编nda*_*son的帖子

在条件或循环中分配智能指针

我正在更新一些pre c ++ 11代码以使用c ++ 11 unique_ptrs.

我不确定如何处理的一件事是旧代码使用指针赋值作为条件.例如

Object* obj;
while ( obj = C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() )
{
   // do something with obj
   delete obj;
}
Run Code Online (Sandbox Code Playgroud)

鉴于std :: unique_ptr :: reset没有返回值,因此无法将其直接转换为:

std::unique_ptr< Object > obj;
while ( obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() ) )
{
   // do something with obj
}
Run Code Online (Sandbox Code Playgroud)

那么,升级此代码以使用unique_ptrs的最简洁方法是什么?我能想到的最好的是:

std::unique_ptr< Object > obj;
obj.reset(  C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() );
while ( obj )
{
   // do something with obj
   obj.reset(  C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() );
}
Run Code Online (Sandbox Code Playgroud)

但这增加了对库函数的混乱双重调用,理想情况下我想避免.

c++ unique-ptr c++11

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

如何将 QStyle::standardIcon/standardPixmap 与 QStyle::StandardPixmap 一起使用?

在我的代码中,有一堆尝试QIconsQStyle标准像素图创建的调用,例如:

QIcon groupIcon;
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirClosedIcon ),
                     QIcon::Normal, QIcon::Off );
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirOpenIcon ),
                     QIcon::Normal, QIcon::On );
Run Code Online (Sandbox Code Playgroud)

虽然这可以正常工作,但使用模型的图标 Qt::DecorationRole会根据项目的展开状态显示打开或关闭的图标,但它有两个问题:

  1. 它对高 dpi 不友好,而且图标很小
  2. QStyle::standardPixmap被标记为已过时,并被QStyle::standardIcon描述为首选方法。

我不确定如何将上面的代码翻译成QStyle::standardIcon

QIcon groupIcon( style()->standardIcon( QStyle::SP_DirClosedIcon ) );
Run Code Online (Sandbox Code Playgroud)

对于封闭的项目效果很好,并且在 hidpi 上看起来很棒。但我不知道如何添加状态SP_DirOpenIcon。没有像“ QIcon::addIcon”这样的等效方法QIcon::addPixmap

这里采取的正确方法是什么,它是高 dpi 友好且面向未来的?

qt

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

标签 统计

c++ ×1

c++11 ×1

qt ×1

unique-ptr ×1