C++ 具有多个字段的对话框
是否可以使用C++ 具有多个字段的对话框,c++,qt,C++,Qt,是否可以使用QComboBox的多个元素轻松创建一个QInputDialog?或者,什么是最可行的方式来提示弹出窗口/对话框,其中可能包含不同的字段(例如2 xQComboBox+1 xQLineEdit)?右键单击Qt Creator中的项目 单击添加新… 单击Qt>Qt设计器表单类 在Qt设计器表单类向导中,单击带有按钮的对话框,单击确定,然后为其命名,然后单击完成 现在,将任意多个组合框和行编辑拖放到视图中 将对象名称(在右侧的属性编辑器中)更改为有意义的名称 对于组合框,双击它们并添加要
QComboBox
的多个元素轻松创建一个QInputDialog
?或者,什么是最可行的方式来提示弹出窗口/对话框,其中可能包含不同的字段(例如2 xQComboBox
+1 xQLineEdit
)?右键单击Qt Creator中的项目
单击添加新…
单击Qt>Qt设计器表单类
在Qt设计器表单类
向导中,单击带有按钮的对话框
,单击确定,然后为其命名,然后单击完成
现在,将任意多个组合框和行编辑拖放到视图中
将对象名称(在右侧的属性编辑器中)更改为有意义的名称
对于组合框,双击它们并添加要在下拉列表中显示的项目
现在,当您想要使用这些元素中的一个值时,可以执行如下操作:
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();
}
希望这能有所帮助。塔达:如何在代码中以稍微困难一点的方式完成。它稍微难一点的主要原因是,您必须手工完成所有布局修补,在每次迭代之间进行编译
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();
}
附:表格非常有用。一旦开始进行移动或嵌入式开发,您可能希望开始使用QML和QML表单(Qt快速控件)
对于在线描述示例,表单很难展示,但我最近参与的大多数大型项目都有一些表单或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();
}
QDialog*d=newqdialog();
QVBoxLayout*vbox=新的QVBoxLayout();
QCOMBOX*comboBoxA=新的QCOMBOX();
comboBoxA->addItems(QStringList()setLayout(vbox);
int result=d->exec();
如果(结果==QDialog::已接受)
{
//处理来自d的值
qDebug()谢谢你的回答,@phyatt。不过,我希望找到一个只使用代码而不是Qt创建者的解决方案。这很好,但所有显式堆分配都是不必要的。所有小部件都可以是本地自动变量。QDialog d;QVBoxLayout vbox(&d);QComboBox comboA,comboB;
等等。