1

特に「PElement」という名前のカスタムウィジェットを備えたQGridLayoutを含む「Spell」という名前のUIFormがあります。PElement ウィジェットの数は、データベース内の呪文の数によって異なります。だから、私は QGridLayout を埋めますui->spellLayout->addWidget(...)

PElement がクリックされると、シグナルを発します。QGridLayout の各 PElement を Spell クラスのスロットに接続する必要があります。やり方がわかりません。手伝ってくれてありがとう!

@編集

これは、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クラスのスロットに接続します。

4

1 に答える 1