Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有多个字段的对话框_C++_Qt - Fatal编程技术网

C++ 具有多个字段的对话框

C++ 具有多个字段的对话框,c++,qt,C++,Qt,是否可以使用QComboBox的多个元素轻松创建一个QInputDialog?或者,什么是最可行的方式来提示弹出窗口/对话框,其中可能包含不同的字段(例如2 xQComboBox+1 xQLineEdit)?右键单击Qt Creator中的项目 单击添加新… 单击Qt>Qt设计器表单类 在Qt设计器表单类向导中,单击带有按钮的对话框,单击确定,然后为其命名,然后单击完成 现在,将任意多个组合框和行编辑拖放到视图中 将对象名称(在右侧的属性编辑器中)更改为有意义的名称 对于组合框,双击它们并添加要

是否可以使用
QComboBox
的多个元素轻松创建一个
QInputDialog
?或者,什么是最可行的方式来提示弹出窗口/对话框,其中可能包含不同的字段(例如2 x
QComboBox
+1 x
QLineEdit
)?

右键单击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;
等等。