QComboBox:我们可以让整个组合框可点击,而不仅仅是下拉按钮(箭头)本身吗?

时间:2015-07-03 03:03:05

标签: c++ qt combobox

我想显示一个类似&#34的文字;请选择一个选项"在组合框上,并没有在列表中显示文本,所以我将setEditable设置为true,然后将文本设置为lineEdit,但在此之后,只有下拉按钮(箭头)可以点击,我们怎么做整个组合框可点击?我使用QComboBox如下:

QComboBox* combbox= new QComboBox;
combbox->setEditable(true);
combbox->lineEdit()->setReadOnly(true);
combbox->addItem("Option1");
combbox->addItem("Option2");
combbox->lineEdit()->setText("Please select one option");

4 个答案:

答案 0 :(得分:1)

我解决了这个问题如下:

class QTComboBoxButton : public QLineEdit
{
    Q_OBJECT
public:
    QTComboBoxButton(QWidget *parent = 0);
    ~QTComboBoxButton();

protected:
    void mousePressEvent(QMouseEvent *);
};

QTComboBoxButton::QTComboBoxButton(QWidget *parent /* = 0 */) :
    QLineEdit(parent)
{
}

QTComboBoxButton::~QTComboBoxButton()
{
}

void QTComboBoxButton::mousePressEvent(QMouseEvent * e)
{
    QComboBox* combo = dynamic_cast<QComboBox*>(parent());
    if(combo)
        combo->showPopup();
}

QComboBox* combbox= new QComboBox;
combbox->setEditable(true);
combbox->setLineEdit(new QTComboBoxButton(combbox));
combbox->lineEdit()->setReadOnly(true);
combbox->addItem("Option1");
combbox->addItem("Option2");
combbox->lineEdit()->setText("Please select one option");

答案 1 :(得分:0)

使用可编辑的QComboBox在UI方面存在问题。 我提出了一种不同的方法,重新实现QComboBox并制作一个默认项目,如果用户点击组合框就将其删除:

#include "mycombo.h"

MyCombo::MyCombo(QWidget *parent) :
    QComboBox(parent),
    defaultText_("Please select one option")
{
    addItem(defaultText_);
}

void MyCombo::mousePressEvent(QMouseEvent* event)
{
    if(this->currentText() == defaultText_)
    {
        this->removeItem(0);
    }

    QComboBox::mousePressEvent(event);
}

然后只需创建此组合框并将项目插入到您想要的位置

MyCombo *combbox = new MyCombo(this);
combbox->addItem("Option1");
combbox->addItem("Option2");

答案 2 :(得分:0)

您可以使用此lib:libqxt

您可以在此处找到它:https://bitbucket.org/libqxt/libqxt/wiki/Home

使用对象QxtCheckComboBox,您可以在其中检查ComboBox中的多个项目。

答案 3 :(得分:0)

IdlChina的答案有一个缺点:当你单击组合框已经显示时,它会隐藏并立即再次显示。我有一个稍微不同的方法,没有那个问题。

#if __CUDA_API_VERSION >= 5000
...function decl...
#endif