gpt4 book ai didi

c++ - 关于 QMainWindow 构造函数中 UI Widgets 'new' 用法的困惑

转载 作者:行者123 更新时间:2023-11-30 03:04:20 25 4
gpt4 key购买 nike

我使用 Qt 的编码实践可以最好地描述如下:

  1. 如果要主动使用 Widget(例如提供文本的 QLineEdit),我会在头文件中声明它,然后在 MainWindow.cpp 中对其进行初始化.例如文本编辑器.h:

类 TextEditor
{
//其他代码
私有(private)的:
QLineEdit edtFind;
};

2.. 如果一个小部件不会被使用(例如 QLabelQWidget),或者它是信号槽系统的一部分(例如 QPushButton),我使用 new 在构造函数中声明并初始化它。

-例如

TextEditor::TextEditor()
{
//other code
QWidget* searchPanel = new QWidget();
edtFind = new QLineEdit("Enter Search Term");
QPushButton* findButton = new QPushButton("Find");
connect(findButton,SIGNAL(pressed()),this,SLOT(find()));

ui->statusbar->addPermanentWidget(searchPanel);
}

我的问题是,我在第 2 点中使用的方法是否有效?不从堆中分配内存会更好吗?

谢谢。

最佳答案

您的方法效率不高。您应该在实际需要时使用堆分配的对象:

  • 生命周期较长的对象
  • 使用前向声明以避免包含头文件
  • 持有对别处创建的对象的引用

您的方法比较复杂,但没有任何明显的好处。众所周知,堆很慢,分配大量小对象会使其碎片化(这可能不会对您的应用产生影响,但它仍然是一种不好的做法)。

关于c++ - 关于 QMainWindow 构造函数中 UI Widgets 'new' 用法的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com