c++ - 在消息框内有一个组合框

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

最佳答案

如果我理解你更正,你想在一个单独的对话框窗口中显示一个组合框,供用户选择一些选项。

其中一种方法是子类化 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 中,这样就可以了。

关于c++ - 在消息框内有一个组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919414/

相关文章:

c++ - 由下划线开头的标识符导致的错误的真实示例

c++ - 语法错误 : EOF in backquote substitution make: *** [mainwindow. o] 错误 2

c++ - 错误 : definition of implicitly declared copy constructor

java - 在 Vaadin Combobox 中引用数据?

c# - ComboBox 填充 DataSource 很慢

c++ - 为什么 void 在 C++ 中不采用 void 值?

c++ - 如何让 SonarQube Scanner 分析 C 和 C++ 代码?

c++ - 如何让QScrollArea根据QDialog改变大小?

c# - XAML 2 组合框颜色样式与资源字典?

c++ - 使用智能指针和继承构造函数的前向声明