如何调用在另一个函数中创建的对象

Posted

技术标签:

【中文标题】如何调用在另一个函数中创建的对象【英文标题】:How to call an object created in another function 【发布时间】:2016-08-09 07:24:46 【问题描述】:

我想在另一个函数中调用 QLabel 类的对象。我知道这是基本的 C++,但它在 Qt 中令人困惑。

在我的 mainwindow.cpp 中我创建了一个函数

void createlbl()

QLabel *lbl1 = new QLabel("Hello");



void Mainwindow :: resizeEvent(QResizeEvent *evt)



我需要在 resizeEvent 函数中调用标签对象 (lbl1) 来调整它的大小。 我还需要在程序的其他函数中调用该对象。 我尝试了不同的方法,但我没有找到正确的方法来调用它并在不同的功能中使用。 请告诉我应该传递哪些参数以及应该如何调用类或创建该类的函数以用于不同的函数。

谢谢

【问题讨论】:

这是基本的C++,和Qt无关。 Member variables. 在标题中声明他,使其可见,在构造函数中实例化他并在您的事件中使用他。 实际上是 createlbl() 主窗口 ::createlbl() 吗? 【参考方案1】:

这是基本的 C++,请查看本教程Class Tutorial。

将您的 QLabel* 创建为头文件中的私有变量,如果您想让其他类可以访问它并使其公开,请添加一个 getter:

public:
     QLabel* label() const  return _label; 
...    
private:
     QLabel* _label;

在您的 cpp 文件中,通过在使用它之前调用您的 createlbl() 函数来初始化您的 QLabel*,让我们在您的类构造函数中调用它以避免空指针。现在,只需在 resizeEvent 函数中使用它:

void Mainwindow :: resizeEvent(QResizeEvent *evt)
     label()->setText("Hey, i'm here!");

【讨论】:

【参考方案2】:

我假设 QLabel 是您的主窗口的member。你也应该像这样声明它。 .h:

class Mainwindow

  public:
    void resizeEvent(QResizeEvent *evt); //Q_DECL_OVERRIDE ?
  private:
    QLabel    mLabel; //a member of MainWindow class, also no pointer

.cpp

MainWindow::MainWindow():
  mLabel()

  //mLabel will be available inside every function of "MainWindow"

MainWindow::resizeEvent(QResizeEvent *evt)

  mLabel.setText("Done.");

就我自己而言,如果可能的话,我会尽量避免使用指针。它更容易,您不必考虑避免内存泄漏。

【讨论】:

当您将小部件添加到其他小部件的布局时,它成为它的子部件,qt 会处理它的删除。 当然可以,但您也可以在没有指针的情况下执行此操作。我只是认为总是使用指针会导致坏习惯。

以上是关于如何调用在另一个函数中创建的对象的主要内容,如果未能解决你的问题,请参考以下文章

你如何调用在javascript中的数组中创建的对象的函数?

如何在另一个 AppDomain 中调用方法

如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?

如何在 Qt 的后续函数调用中访问在函数中创建的小部件

如何在dojo工具包的Current JS文件中使用在另一个JS文件中创建的Dialog变量

使用在另一个 Swift VC 文件中创建的对象?