在运行时以语法方式添加QWidget(qt)

时间:2017-06-20 14:35:17

标签: c++ qt runtime

我正在尝试在运行时从QPushButton派生的另一个小部件中添加两个QPushButton。当我在创建窗口小部件时这样做时,内部QPushButton显示正常,但是当我尝试修改窗口小部件以使它们显示时,它不起作用。

我尝试使用.show()最多不规则地工作,并直接修改可见性,结果类似。

以下是相关代码:

const QString eleve::baseColor("background-color : #ffffff");
eleve::eleve(const QString & name,QWidget *parent):QPushButton(parent),grade(0),isdead(false){
    setFocusPolicy(Qt::NoFocus);
    setText(name);
    init_Boutton();
    setFixedSize(QSize(100,50));
    setStyleSheet("background-color: #ffffff;text-align:left;");
}

eleve::eleve(QWidget *parent):QPushButton(parent),grade(0),isdead(true){
    setFocusPolicy(Qt::NoFocus);
    setText("");
    setFixedSize(QSize(100,50));
    setStyleSheet("background-color: #ffffff;text-align:left;");
}

void eleve::init_Boutton(){
    plus=new QPushButton("+",this);
    moins=new QPushButton("-",this);


    moins->setFixedSize(30,this->size().height()/2+2);
    plus->setFixedSize(30,this->size().height()/2+2);

    int xPlus=this->pos().x()+size().width()-plus->size().width();
    int xMoins=this->pos().x()+size().width()-moins->size().width();
    int yMoins=this->pos().y()+size().height()-moins->size().height();
    moins->move(xMoins,yMoins);
    plus->move(xPlus,0);

    moins->setFocusPolicy(Qt::NoFocus);
    plus->setFocusPolicy(Qt::NoFocus);

    QObject::connect(plus, SIGNAL(clicked()),this,SLOT(plusFunc()));
    QObject::connect(moins, SIGNAL(clicked()),this,SLOT(moinsFunc()));

    plus->setStyleSheet("text-align:center;");
    moins->setStyleSheet("text-align:center;");
}

void eleve::Die(){
    isdead=true;
    setName("");
    setStyleSheet("background-color:#ffffff");
    delete plus;
    delete moins;
}

void eleve::Born(const QString name){
    isdead=false;
    if(name.isEmpty())
        AskForName();
    else
        setText(name);
    init_Boutton();
}


void eleve::AskForName(){
    setStyleSheet("background-color:#ffffff; text-align:left;");
    bool ok = false;
    QString tempName=QInputDialog::getText(this, "renommage","Nouveau nom:", QLineEdit::Normal, this->text(), &ok);
    if (ok){
        if(!tempName.isEmpty()){
            //setStyleSheet(tempStyle);
            changeColor();
            if(isdead)
                Born(tempName);
            else
                setText(tempName);
        }
    }
}

因此,在使学生活着的构造函数中和在Born函数中调用init_Button,但不会使它们仅出现在Born函数中。

在下面的屏幕截图中,您希望我想在顶部实现,并在底部获得结果(为空)。空的是正常的,因为我没有要求他们出生!

https://ibb.co/e0Q4a5

0 个答案:

没有答案