2016-08-09 2 views
-5

Я хочу вызвать объект класса QLabel в другой функции. Я знаю, что это базовый C++, но он запутан в Qt.Как вызвать объект, созданный в другой функции

в моем mainwindow.cpp я создал функцию

void createlbl(){ 

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

} 

void Mainwindow :: resizeEvent(QResizeEvent *evt){ 


} 

нужно вызвать объект метки (lbl1) в функции resizeEvent, чтобы изменить его размер. Мне также нужно вызвать объект в других функциях моей программы. Я пробовал разные способы, но я не получаю правильный способ назвать его и использовать в разных функциях. Пожалуйста, скажите мне, какие параметры следует передать, и как я должен назвать класс или функцию, в которой класс создан для использования в разных функциях.

Спасибо

+4

Это базовый C++, и он не имеет ничего общего с Qt. – juanchopanza

+1

[Переменные участника] (https://en.wikipedia.org/wiki/Member_variable). – thuga

+0

Объявите его в заголовке, чтобы быть видимым, установить его в конструкторе и использовать его в вашем случае. – Skywrath

ответ

1

Это базовый C++, проверить этот учебник Class Tutorial.

Создать свой QLabel * в качестве частной переменной в файле заголовка, добавьте поглотитель, если вы хотите, чтобы сделать его подъезд к другим классам и обнародует его:

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

В файле CPP инициализации вашей QLabel * вызвав функцию createlbl() перед ее использованием, позвоните в конструктор класса, чтобы избежать нулевых указателей. Теперь, просто использовать его в функции resizeEvent:

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

Я предполагаю, что QLabel является member вашей MainWindow. Вы должны также объявить это так.

.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."); 
} 

Для себя, я стараюсь избегать указателей, если это возможно. Это намного проще, и вам не нужно думать об избежании утечек памяти.

+0

Когда вы добавляете виджет в макет другого виджета, он становится его дочерним, и qt заботится о его удалении. –

+0

Конечно, но вы также можете сделать это без указателей. Я просто подумал, что это может привести к вредным привычкам к излишнему использованию указателей. – Drayke