问:如何将父级设置为其子类的成员变量?

时间:2017-07-19 05:22:20

标签: c++ qt qt5

我正在尝试将父项分配给变量(在子类的构造函数中),然后我想使它成为子类的成员变量。我怎么能在Qt中做到这一点?

代码:

PopupServer::PopupServer(QWidget *parent) { 
//I need to store the parent in variable Win 
//and make it member variable of PopupServer class 

}

void PopupServer::showPopup(const QString &text,const int &tim ) {
    QLabel qPopup= new QLabel; qPopup.setText(text); 
    qPopup.setFrameStyle(QLabel::Raised | QLabel::Panel);
    qPopup.setAlignment(Qt::AlignCenter); 
    qPopup.setFixedSize(200,100); 
    int width;
    int height; 
    width= win.width(); 
    height= win.height(); 
    qPopup.move(width-qPopup.width(),height-qPopup.height()); 
    qPopup.show(); 
} 

2 个答案:

答案 0 :(得分:1)

从QObject继承的所有类都可以通过parent()方法访问父类,在您的情况下,您的类继承自QWidget,而QWidget继承自QObject,因此您的类也具有该方法。所以你不需要创建属性。

根据documentation

  

QObject * QObject :: parent()const

     

返回指向父对象的指针。

在你的情况下:

void PopupServer::showPopup(const QString &text,const int &tim ) {
    QLabel qPopup= new QLabel; qPopup.setText(text);
    qPopup.setFrameStyle(QLabel::Raised | QLabel::Panel); 

    Popup.setAlignment(Qt::AlignCenter); 
    qPopup.setFixedSize(200,100); 

    int width; int height; 

    QWidget * win = qobject_cast<QWidget *>(parent());
    if(win){
        width= win->width(); 
        height= win->height();
        qPopup.move(width-qPopup.width(),height-qPopup.height());
    }

    qPopup.show(); 

} 

答案 1 :(得分:0)

要创建子类(Popup Server)的父(主窗口)成员变量,请添加:

在popupserver.h中:

private:
   QWidget *win;

在popupserver.cpp中,(构造函数):

PopupServer::PopupServer(QWidget *parent)
{
win=parent; }