我想在消息框中创建一个组合框并返回所选的值以便稍后使用。
我可以在窗口本身做同样的事情,但不知道如何在组合框内做到这一点。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->comboBox->addItem("Red");
ui->comboBox->addItem("Blue");
ui->comboBox->addItem("Green");
ui->comboBox->addItem("Yellow");
ui->comboBox->addItem("Pink");
ui->comboBox->addItem("Purple");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QMessageBox::about(this,"Choose color of rectangle", ui->comboBox->currentText() );
}
答案 0 :(得分:1)
如果我理解你是正确的,你想在单独的对话窗口中显示一个组合框,供用户选择一些选项。
其中一种方法是将QDialog
子类化。如果组合字段和要接受的按钮足够,则该类可能如下所示:
class CustomDialog : public QDialog
{
public:
CustomDialog(const QStringList& items)
{
setLayout(new QHBoxLayout());
box = new QComboBox;
box->addItems(items);
layout()->addWidget(box);
QPushButton* ok = new QPushButton("ok");
layout()->addWidget(ok);
connect(ok, &QPushButton::clicked, this, [this]()
{
accept();
});
}
QComboBox* comboBox() { return box; }
private:
QComboBox* box;
};
要使用类对象,您可以调用exec
以模态方式显示它。然后,您可以通过按ok
按钮验证用户是否接受了选择并采取了适当的措施。
QStringList itemList({"item1", "item2", "item3"});
CustomDialog dialog(itemList);
if (dialog.exec() == QDialog::Accepted)
{
// take proper action here
qDebug() << dialog.comboBox()->currentText();
}
在QMessageBox
类中实现了类似的方法,其中可以指定多个选项来更改显示的内容(例如按钮配置或复选框存在)。
修改强>
要在您自己的项目中使用示例代码,您应该将我发布的后一部分放入您的on_pushButton_clicked()
广告位。用您的颜色名称列表替换itemList
。然后将CustomDialog
类放到main中包含的单独文件中,您应该很高兴。