【问题标题】: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无关。
  • 在标题中声明他,使其可见,在构造函数中实例化他并在您的事件中使用他。
  • 实际上是 createlbl() 主窗口 ::createlbl() 吗?

标签: c++ qt function


【解决方案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 会处理它的删除。
    • 当然可以,但您也可以在没有指针的情况下执行此操作。我只是认为总是使用指针会导致坏习惯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多