QMessageBox没有widget
时间: 2023-08-09 11:12:46 浏览: 135
很抱歉,我之前的回答有误。`QMessageBox`确实没有直接访问其内部控件的方法。因此,如果你想在`QMessageBox`中添加更复杂的控件,可以考虑使用自定义对话框或使用`QDialog`来替代`QMessageBox`。
以下是一个示例代码,演示如何使用自定义对话框来实现在消息框中添加`QComboBox`:
```cpp
#include <QApplication>
#include <QDialog>
#include <QMessageBox>
#include <QComboBox>
#include <QVBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDialog dialog;
QVBoxLayout layout(&dialog);
QComboBox comboBox;
comboBox.addItem("选项1");
comboBox.addItem("选项2");
comboBox.addItem("选项3");
layout.addWidget(&comboBox);
QPushButton button("确定");
layout.addWidget(&button);
dialog.setLayout(&layout);
QObject::connect(&button, &QPushButton::clicked, [&dialog, &comboBox]() {
QString selectedOption = comboBox.currentText();
QMessageBox::information(nullptr, "选择的选项", "你选择了:" + selectedOption);
dialog.close();
});
dialog.exec();
return app.exec();
}
```
在上面的示例中,我们创建了一个自定义对话框`QDialog`,并在其上添加了一个垂直布局`QVBoxLayout`。
然后,我们创建了一个`QComboBox`控件,并向其添加了几个选项。
通过调用`addWidget()`方法,我们将`QComboBox`和一个确认按钮`QPushButton`添加到布局中。
接下来,我们通过调用`setLayout()`方法将布局设置为对话框的布局。
在确认按钮的点击事件中,我们获取当前选择的选项,并使用`QMessageBox`显示该选项的信息。
最后,我们通过调用`exec()`方法显示自定义对话框。
请注意,这只是一个简单的示例,你可以根据需要进行修改和扩展。
希望这个示例对你有帮助!如果还有其他问题,请随时提问。
阅读全文