在消息框中有一个组合框

时间:2016-12-01 20:03:09

标签: c++ qt combobox

我想在消息框中创建一个组合框并返回所选的值以便稍后使用。

我可以在窗口本身做同样的事情,但不知道如何在组合框内做到这一点。

    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() );
}

1 个答案:

答案 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中包含的单独文件中,您应该很高兴。