如何将QGridLayout中的CustomWidget与UIForm类连接起来

时间:2015-09-23 21:10:37

标签: qt signals-slots qgridlayout

我有一个名为“Spell”的UIForm,其中包含QGridLayout以及名为“PElement”的自定义小部件。 PElement小部件的数量取决于我的数据库中的法术数量。所以,我按ui->spellLayout->addWidget(...)

填写QGridLayout

单击PElement时会发出信号。我需要将QGridLayout中的每个PElement与Spell类中的插槽连接起来。我不知道该怎么做。 谢谢你的帮助!

@edit

这是一个将PictureElement添加到QGridLayout

的函数
void Spells::setSpellList(QString lore)
{
    QList<QStringList> elementList = Database::instance()->getSpellElement(lore);
    while(ui->spellLayout->count() > 0) {
        QWidget *w = ui->spellLayout->itemAt(0)->widget();
        ui->spellLayout->removeWidget(w);
        delete w;
    }

    int w,h;
    w = 162;
    h = 203;

    int maxCol = ui->spellScrollArea->width() / (w + ui->spellLayout->spacing());
    if(maxCol<=0) {
        Indicator::instance()->hide();
        return;
    }
    foreach(QStringList list, elementList){
        PictureElement *spellElement = new PictureElement;
        spellElement->setText(list.at(0));
        spellElement->setPixmap(list.at(1));
        spellElement->setMinimumSize(w, h);
        ui->spellLayout->addWidget(spellElement,
                                   ui->spellLayout->count() / maxCol,
                                   ui->spellLayout->count() % maxCol);
        spellElement->show();
    }
    Indicator::instance()->hide();
}

我想要的: 将QGridLayout中的每个PictureElement(SIGNAL点击)与Spells类中的插槽连接起来。

1 个答案:

答案 0 :(得分:0)

我不太确定问题出在哪里。假设您的班级PictureElement继承QObject,包含Q_OBJECT宏并发出信号,您只需在foreach循环中添加连接线:

foreach(QStringList list, elementList){
    PictureElement *spellElement = new PictureElement;
    ...
    QObject::connect(spellElement, SIGNAL(clicked()), this, SLOT(slotname()));
}

您已经在Spells课程中,因此访问不应成为问题。当然,slotname()函数需要定义为标题中的一个插槽。要确定哪个PictureElement在插槽中发出了信号,您可以使用QObject::sender()方法。