2017-01-23 4 views
0

は、私は、単一のテキストボックステキストボックスの下方に配置されたラジオボタンがあるとします。私が欲しいものQtで動的に拡張できるUI項目はどれですか?

場合、ユーザはが同様テキストボックスラジオボタンがすぐ下に表示されます]ラジオボタンをクリックし、いくつかのテキストとに入るということです。また、ユーザーが新しいUI項目についてこれを行う場合、同様のことが起こるはずです。

どのようなクラスをお探しですか?

+1

あなたはそれが見えるようにシグナルとスロットを使用して、UIに隠されたコントロールを追加することができます。私はそれをいくつかのケースで行ってきました。 – drescherjm

+0

[レイアウト](https://doc.qt.io/qt-5/layout.html)? – peppe

+0

これは1回だけ、または新しいテキストボックスに何かを入力して、新しいボタンが新しいように見える場合にのみ実行されます。 – eyllanesc

答えて

0

新しいウィジェットの挿入を処理するために必要な関連クラスは、QLayoutサブクラスの1つです。おそらくQVBoxLayoutと思われます。これによりレイアウトの下部に新しいテキストボックスとラジオボタンが挿入され、自動的にこれらの新しいウィジェットに合わせて展開されます。

新しいオブジェクトを挿入するのはかなり簡単です。レイアウトの下部にあるQRadioButtonの信号にスロットを接続します(QRadioButton::toggledまたはQRadioButton::clicked信号など)。このスロットは、上記のテキストボックスにテキストがあるかどうかをチェックし、そうであればその下に新しいテキストボックス/ラジオボタンのペアを挿入します。

このスロットは、レイアウトを使用してそのサブウィジェットを配置するウィジェットのメソッドである必要があります。たとえば、これらのオブジェクトをすべてQGroupBoxに入れている場合は、それは私が記述しているスロットを追加するオブジェクトです。ここで

は(未テスト)の例である:

class Group : public QGroupBox { 
    Q_OBJECT 

    public: 
     Group(QWidget* parent = nullptr) : QGroupBox(parent) 
     { 
      layout = new QVBoxLayout(this); 
      insertNewRow(); 
     } 

    private slots: 
     void insertNewRow(bool checked = true) { 
      /* You might want to make this remove the row if the button is unchecked */ 
      if (!checked) 
       return; 

      /* Only add row if text box is non-empty */ 
      if (textBoxes.isEmpty() || textBoxes.last()->text().isEmpty()) 
       return; 

      /* Disconnect slot for previous radio button */ 
      QObject::disconnect(radioButtons.last(), 0, 0, 0); 

      /* Add new text box and button, labeled Button 1, Button 2, etc. */ 
      textBoxes.append(new QLineEdit("", this)); 
      radioButtons.append(new QRadioButton(QString("Button %1").arg(textBoxes.size())), this)); 

      /* Connect signal/slot to add new row when clicked */ 
      QObject::connect(radioButtons.last(), &QRadioButton::toggled, this, &Group::insertNewRow); 
     } 

    private: 
     QVBoxLayout* layout; 
     QList<QLineEdit*> textBoxes; 
     QList<QRadioButton*> radioButtons; 
}; 
関連する問題