0
假设我有一个单独的文本框和一个单选按钮放置在文本框的下方。哪个UI项目可以在Qt中进行动态扩展?
我想那是什么如果用户输入一些文字和ALSO点击单选按钮类似文本框和单选按钮应该出现的正下方。如果用户为新的UI项目执行此操作,则会发生类似的事情。
任何建议我应该寻找什么类?
假设我有一个单独的文本框和一个单选按钮放置在文本框的下方。哪个UI项目可以在Qt中进行动态扩展?
我想那是什么如果用户输入一些文字和ALSO点击单选按钮类似文本框和单选按钮应该出现的正下方。如果用户为新的UI项目执行此操作,则会发生类似的事情。
任何建议我应该寻找什么类?
您需要处理插入新小部件的相关类是QLayout
的子类之一,很可能是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;
};
您可以添加使用信号和槽使其可见一个隐藏的控制,你的用户界面。我在少数情况下已经这样做了。 – drescherjm
[布局](https://doc.qt.io/qt-5/layout.html)? – peppe
这只会做一次,或者如果你在新的文本框中键入的东西,并按新的按钮应该显示新的? – eyllanesc