QInputDialog包含多个字段

时间:2015-03-18 19:18:47

标签: c++ qt

是否可以轻松制作包含QInputDialog多个元素的QComboBox?或者,提示弹出窗口/对话框的最可行方法是什么,可能有不同的字段(等等2 x QComboBox + 1 x QLineEdit)?

2 个答案:

答案 0 :(得分:5)

TADA:如何以更难的方式完成代码。而且它稍微难点的主要原因是因为你必须手工完成所有布局修补,并在每次迭代之间进行编译。

PS:表格非常有用。一旦开始进行移动或嵌入式开发,您可能需要开始使用QML和QML表单(Qt Quick Controls)。

为了在线描述示例,表单很难并且难以展示,但是我最近工作的大多数大型项目都有一些表格或QML。

希望有所帮助。

QDialog * d = new QDialog();
QVBoxLayout * vbox = new QVBoxLayout();
QComboBox * comboBoxA = new QComboBox();
comboBoxA->addItems(QStringList() << "A" << "B" << "C");
QComboBox * comboBoxB = new QComboBox();
comboBoxB->addItems(QStringList() << "A" << "B" << "C");
QLineEdit * lineEditA = new QLineEdit();

QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
                                                    | QDialogButtonBox::Cancel);

QObject::connect(buttonBox, SIGNAL(accepted()), d, SLOT(accept()));
QObject::connect(buttonBox, SIGNAL(rejected()), d, SLOT(reject()));

vbox->addWidget(comboBoxA);
vbox->addWidget(comboBoxB);
vbox->addWidget(lineEditA);
vbox->addWidget(buttonBox);

d->setLayout(vbox);

int result = d->exec();
if(result == QDialog::Accepted)
{
    // handle values from d
    qDebug() << "The user clicked:"
             << "ComboBoxA" << comboBoxA->currentText()
             << "ComboBoxB" << comboBoxB->currentText()
             << "LineEditA" << lineEditA->text();
}

答案 1 :(得分:0)

在Qt Creator中右键单击您的项目。

点击Add New...

点击Qt > Qt Designer Form Class

Qt Designer Form Class向导中,单击Dialog with Buttons,单击“确定”,然后为其命名,然后单击“完成”。

现在可以根据需要将任意数量的组合框和行编辑拖放到视图中。

将对象名称(在右侧的属性编辑器中)更改为有意义的内容。

对于组合框,双击它们并添加要在下拉列表中显示的项目。

现在,当您想要使用这些元素中的一个值时,您可以执行以下操作:

Dialog d;
int result = d.exec();// Show it as a modal dialog
if(result == QDialog::Accepted)
{
    // handle values from d
    qDebug() << "The user clicked:" 
             << "ComboBoxA" << d.getComboBoxAText() 
             << "ComboBoxB" << d.getComboBoxBText() 
             << "LineEditA" << d.getLineEditAText();
}

但请确保在Dialog类中添加一些公共函数:

QString Dialog::getComboBoxAText()
{
    return ui->comboBoxA()->currentText();
}

希望有所帮助。