0

そのため、現在、QComboBox から選択が行われたときに、いくつかの QLabels、QLineEdit、および QCheckBox を作成するコードを C++ で作成しています。ただし、コンボ ボックスから新しい選択が行われた場合に、後の関数で作成したウィジェットにアクセスしてそれらを破棄できるようにしたいと考えています。ui-> Objectを実行することで Designer を使用して作成されたオブジェクトにアクセスできますが、独自のコードを使用して作成されたオブジェクトではアクセスできません。私はそれを扱う方法を知っているので、どうにかしてそれを行うことができますか。

つまり、ユーザーの選択に基づいて QWidgets を動的に作成/破棄できるようにしたいと考えています。これを行うために知っておくべきリファレンスやドキュメントはありますか? それとも、私はこれについて完全に間違った方法で進んでいますか? オブジェクトを作成するために現在持っているコードは次のとおりです。

   if (eventType == QString::fromStdString("Birthday"))
   {

   QLabel *label1 = new QLabel ("Celebrant: ");
   QLabel *label2 = new QLabel ("Surprise: ");
   QLineEdit *lineEdit = new QLineEdit;
   QCheckBox *box = new QCheckBox;

   ui->gridLayout->addWidget(label1,3,0,1,1, 0);
   ui->gridLayout->addWidget(label2,4,0,1,1,0);
   ui->gridLayout->addWidget(lineEdit,3,1,1,1,0);
   ui->gridLayout->addWidget(box,4,1,1,2,0);

   }
4

3 に答える 3

2

アクセスしたいコードのすべての部分からアクセスできるスコープに変数を作成する必要があります。ほとんどの場合、ウィンドウ クラスのプライベート属性として。

于 2011-02-17T22:25:56.377 に答える
2

( を使用して) 名前を付けると、setObjectName()後で を使用して見つけることができます QObject::findChildren()

しかし、それらをメンバー変数に格納するだけの方が簡単ではないでしょうか?

于 2011-02-17T22:27:22.363 に答える
1

投稿されたコードから、グリッド レイアウトの位置にある既存のウィジェットを置き換えたいようです。その場合は、新しいウィジェットを位置に追加する前に、次のようにします。

QLayoutItem * existingitem = ui->gridLayout->itemAtPosition(x, y);
if(existingitem) {
    ui->gridLayout->removeItem(existingitem);
    delete existingitem;
}
于 2011-02-17T23:21:52.380 に答える