は、私は、単一のテキストボックスとテキストボックスの下方に配置されたラジオボタンがあるとします。私が欲しいものQtで動的に拡張できるUI項目はどれですか?
は場合、ユーザはが同様テキストボックスとラジオボタンがすぐ下に表示されます]ラジオボタンをクリックし、いくつかのテキストとに入るということです。また、ユーザーが新しいUI項目についてこれを行う場合、同様のことが起こるはずです。
どのようなクラスをお探しですか?
は、私は、単一のテキストボックスとテキストボックスの下方に配置されたラジオボタンがあるとします。私が欲しいものQtで動的に拡張できるUI項目はどれですか?
は場合、ユーザはが同様テキストボックスとラジオボタンがすぐ下に表示されます]ラジオボタンをクリックし、いくつかのテキストとに入るということです。また、ユーザーが新しいUI項目についてこれを行う場合、同様のことが起こるはずです。
どのようなクラスをお探しですか?
新しいウィジェットの挿入を処理するために必要な関連クラスは、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;
};
あなたはそれが見えるようにシグナルとスロットを使用して、UIに隠されたコントロールを追加することができます。私はそれをいくつかのケースで行ってきました。 – drescherjm
[レイアウト](https://doc.qt.io/qt-5/layout.html)? – peppe
これは1回だけ、または新しいテキストボックスに何かを入力して、新しいボタンが新しいように見える場合にのみ実行されます。 – eyllanesc