C++ QFileDialog自定义布局

C++ QFileDialog自定义布局,c++,qt,qt5,qlayout,C++,Qt,Qt5,Qlayout,我正在开发一个文件对话框,以便在我的应用程序中导入文件,我希望有一个附加的QComboBox,其中包含文件名编辑和文件类型过滤器组合框之间的格式列表,如下所示: 我成功地在如下过滤器下添加了QComboBox: 使用此代码: QGridLayout * layout = qobject_cast <QGridLayout *>(dialog->layout()); QLabel * labelFormat = new QLabel(tr("Format"), dialog)

我正在开发一个文件对话框,以便在我的应用程序中导入文件,我希望有一个附加的
QComboBox
,其中包含
文件名
编辑和
文件类型
过滤器组合框之间的格式列表,如下所示:

我成功地在如下过滤器下添加了
QComboBox

使用此代码:

QGridLayout * layout = qobject_cast <QGridLayout *>(dialog->layout());
QLabel * labelFormat = new QLabel(tr("Format"), dialog);
layout->addWidget(labelFormat, 4, 0);
QComboBox * comboBoxFormat = new QComboBox(dialog);
layout->addWidget(comboBoxFormat, 4, 1);
但我得到了错误的位置:


如何从第一个屏幕截图实现小部件定位?

在您的情况下,问题是由于您错误地定位了
QDialogButtonBox
,它必须位于位置3,2,占据2行和1列:

QGridLayout *layout = qobject_cast<QGridLayout *>(dialog->layout());

QWidget * w0 = layout->itemAtPosition(3, 0)->widget();
QWidget * w1 = layout->itemAtPosition(3, 1)->widget();
QWidget * w2 = layout->itemAtPosition(3, 2)->widget();

QLabel * labelFormat = new QLabel("Format", dialog);
layout->addWidget(labelFormat, 3, 0);

QComboBox * comboBoxFormat = new QComboBox(dialog);
layout->addWidget(comboBoxFormat, 3, 1);

layout->replaceWidget(w0, labelFormat);
layout->replaceWidget(w1, comboBoxFormat);

layout->addWidget(w0, 4, 0);
layout->addWidget(w1, 4, 1);
layout->addWidget(w2, 3, 2, 2, 1);
QGridLayout*layout=qobject_cast(对话框->布局());
QWidget*w0=layout->itemAtPosition(3,0)->widget();
QWidget*w1=layout->itemAtPosition(3,1)->widget();
QWidget*w2=layout->itemAtPosition(3,2)->widget();
QLabel*labelFormat=新的QLabel(“格式”,对话框);
布局->添加小部件(labelFormat,3,0);
QComboBox*ComboxFormat=新建QComboBox(对话框);
布局->添加小部件(comboBoxFormat,3,1);
布局->替换小部件(w0,labelFormat);
布局->替换小部件(w1,comboBoxFormat);
布局->添加小部件(w0,4,0);
布局->添加小部件(w1,4,1);
布局->添加小部件(w2,3,2,2,1);

QGridLayout *layout = qobject_cast<QGridLayout *>(dialog->layout());

QWidget * w0 = layout->itemAtPosition(3, 0)->widget();
QWidget * w1 = layout->itemAtPosition(3, 1)->widget();
QWidget * w2 = layout->itemAtPosition(3, 2)->widget();

QLabel * labelFormat = new QLabel("Format", dialog);
layout->addWidget(labelFormat, 3, 0);

QComboBox * comboBoxFormat = new QComboBox(dialog);
layout->addWidget(comboBoxFormat, 3, 1);

layout->replaceWidget(w0, labelFormat);
layout->replaceWidget(w1, comboBoxFormat);

layout->addWidget(w0, 4, 0);
layout->addWidget(w1, 4, 1);
layout->addWidget(w2, 3, 2, 2, 1);