小编swo*_*ngu的帖子

在函数中返回大对象

比较以下两段代码,第一段使用对大对象的引用,第二段使用大对象作为返回值.对"大对象"的强调指的是不必要地重复对象的副本是浪费的循环.

使用对大对象的引用:

void getObjData( LargeObj& a )
{
  a.reset() ;
  a.fillWithData() ;
}

int main()
{
  LargeObj a ;
  getObjData( a ) ;
}
Run Code Online (Sandbox Code Playgroud)

使用大对象作为返回值:

LargeObj getObjData()
{
  LargeObj a ;
  a.fillWithData() ;
  return a ;
}

int main()
{
  LargeObj a = getObjData() ;
}
Run Code Online (Sandbox Code Playgroud)

第一段代码不需要复制大对象.

在第二个片段中,对象是在函数内部创建的,因此通常在返回对象时需要复制.但是,在这种情况下,main()正在声明对象.编译器是否会首先创建一个默认构造的对象,然后复制返回的对象getObjData(),或者它是否与第一个片段一样有效?

我认为第二个片段更容易阅读,但我担心效率会降低.

编辑:通常,我认为案例LargeObj是通用容器类,为了参数,它们包含数千个对象.例如,

typedef std::vector<HugeObj> LargeObj ;
Run Code Online (Sandbox Code Playgroud)

所以直接修改/添加方法LargeObj不是一个可直接访问的解决方案.

c++

40
推荐指数
2
解决办法
7240
查看次数

在Qt中,如何在不同的组框中对齐表单元素?

我正在尝试创建一个标准的双列表单,其中第一列是文本标签(QLabel),第二列是交互式窗口小部件,通常是文本字段(QLineEdit).我们已经决定将一个共享主题的表单行放在一个内部QGroupBox,因此在一个单独的布局中,而不是主要布局.因此,每个内部QGroupBox的表单元素不与QGroupBoxes 之外的表单元素水平对齐.

如何以一种方式使用组框和布局,使得组合框内外的QLabels和QLineEdits彼此(水平)对齐?

谢谢!

layout qt qt4

12
推荐指数
1
解决办法
8625
查看次数

在Qt中,创建一个包含空白可编辑行的表

这是一个特定于Qt的问题.

通过在表格底部的空行中键入内容,可以方便地将新数据添加到表格中.提交数据时,会向表中添加一个新的空行.

有没有人找到一种以通用方式实现它的方法,这适合Qt的模型 - 视图编程架构?我最接近的尝试涉及创建代理模型,使得rowCount()从模型返回的值始终大于源模型.

QAbstractTableModel* sourceModel ; // Data is stored here
QBlankRowModel* model ; // Proxy model that adds one to rowCount()
QTableView* view ; // View
view->setModel( model ) ;
model->setSourceModel( sourceModel ) ;
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议.谢谢.

qt qt4

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

没有窗口图标的Qt对话框(系统菜单)

有没有办法创建一个窗口(如a QDialog),左上角没有窗口图标?我尝试过使用透明图标,但在那里留下了空白.

编辑:下面的richardwb解决方案删除了​​系统菜单,但也删除了最小化/最大化/关闭(标题按钮).这可能现在可以做,但希望有一个解决方案可以保留字幕按钮.

windows icons qt qt4

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

在Windows中,是什么使qmake在调试目标中附加"d"?

我正在使用提供的.pro文件,并且由于某种原因,它被配置为使得调试库没有在其库名称后附加"d".是什么导致这种情况以及如何恢复它?

例如QtGui4.dll(发布)和QtGuid4.dll(调试)

谢谢.

windows qt qmake

3
推荐指数
1
解决办法
3628
查看次数

C++重载函数问题

为什么编译器找不到基类函数签名?更改foo( a1 )B::foo( a1 )的作品.

码:

class A1 ;
class A2 ;

class B
{
public:
   void foo( A1* a1 ) { a1 = 0 ; }
} ;

class C : public B
{
public:
   void foo( A2* /*a2*/ )
   {
      A1* a1 = 0 ;
      foo( a1 ) ;
   }
} ;

int main()
{
   A2* a2 = 0 ;
   C c ;
   c.foo( a2 ) ;
   return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

编译器错误(VS2008):

error C2664: …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

0
推荐指数
1
解决办法
761
查看次数

标签 统计

qt ×4

qt4 ×3

c++ ×2

windows ×2

icons ×1

inheritance ×1

layout ×1

qmake ×1