Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在ComboBox的编辑字段中创建按钮?_C++_Qt_Qt5_Qcombobox - Fatal编程技术网

C++ 如何在ComboBox的编辑字段中创建按钮?

C++ 如何在ComboBox的编辑字段中创建按钮?,c++,qt,qt5,qcombobox,C++,Qt,Qt5,Qcombobox,要求是当我们在ComboBox中键入内容时,此字段右侧会出现一个X按钮(以删除我们键入的内容)。我该怎么做 setClearButtonEnabled的结果 您必须启用QLineEdit的clearButtonEnabled属性: #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); QComboBox combo; combo.setEdit

要求是当我们在ComboBox中键入内容时,此字段右侧会出现一个X按钮(以删除我们键入的内容)。我该怎么做

setClearButtonEnabled的结果


您必须启用
QLineEdit
clearButtonEnabled
属性:

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QComboBox combo;
    combo.setEditable(true);
    if(QLineEdit *le = combo.lineEdit())
        le->setClearButtonEnabled(true);
    combo.show();
    return a.exec();
}
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
combo.setEditable(真);
if(QLineEdit*le=combo.lineEdit())
le->setClearButtonEnabled(真);
combo.show();
返回a.exec();
}

更新: 您必须创建自定义QLineEdit

#include <QtWidgets>

class LineEdit: public QLineEdit
{
    Q_OBJECT
public:
    LineEdit(QWidget *parent=nullptr):
        QLineEdit(parent)
    {
        QAction *action = addAction(QIcon(":/clear.png"), QLineEdit::TrailingPosition);
        button = qobject_cast<QToolButton *>(action->associatedWidgets().last());
        button->hide();
        connect(this, &QLineEdit::textChanged, this, &LineEdit::onTextChanged);
        connect(button, &QToolButton::clicked, this, &QLineEdit::clear);
    }
private slots:
    void onTextChanged(const QString & text){
        button->setVisible(!text.isEmpty());
    }
private:
    QToolButton *button;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QComboBox combo;
    combo.setEditable(true);
    combo.setLineEdit(new LineEdit);
    combo.show();
    return a.exec();
}
#include "main.moc"
#包括
类LineEdit:公共QLineEdit
{
Q_对象
公众:
LineEdit(QWidget*parent=nullptr):
QLineEdit(父级)
{
QAction*action=addAction(QIcon(:/clear.png),QLineEdit::TrailingPosition);
button=qobject_cast(操作->关联小部件().last());
按钮->隐藏();
连接(this,&QLineEdit::textChanged,this,&LineEdit::onTextChanged);
连接(按钮,&QToolButton::单击,此,&QLineEdit::清除);
}
专用插槽:
void onTextChanged(常量QString&text){
按钮->设置可见(!text.isEmpty());
}
私人:
QToolButton*按钮;
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
combo.setEditable(真);
combo.setLineEdit(新建LineEdit);
combo.show();
返回a.exec();
}
#包括“main.moc”

另一个选项:自定义样式
#包括
类ClearLineEditStyle:公共QProxyStyle{
公众:
使用QProxyStyle::QProxyStyle;
QPixmap standardPixmap(standardPixmap standardIcon,const QStyleOption*选项,const QWidget*小部件)const{
如果(标准图标==SP_LineEditClearButton){
返回QPixmap(“:/clear.png”);
}
返回QProxyStyle::standardPixmap(标准图标、选项、小部件);
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
ClearLineEditStyle*style=新的ClearLineEditStyle(combo.style());
组合。设置样式(样式);
combo.setEditable(真);
if(QLineEdit*le=combo.lineEdit())
le->setClearButtonEnabled(真);
combo.show();
返回a.exec();
}

您必须启用
QLineEdit
clearButtonEnabled
属性:

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QComboBox combo;
    combo.setEditable(true);
    if(QLineEdit *le = combo.lineEdit())
        le->setClearButtonEnabled(true);
    combo.show();
    return a.exec();
}
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
combo.setEditable(真);
if(QLineEdit*le=combo.lineEdit())
le->setClearButtonEnabled(真);
combo.show();
返回a.exec();
}

更新: 您必须创建自定义QLineEdit

#include <QtWidgets>

class LineEdit: public QLineEdit
{
    Q_OBJECT
public:
    LineEdit(QWidget *parent=nullptr):
        QLineEdit(parent)
    {
        QAction *action = addAction(QIcon(":/clear.png"), QLineEdit::TrailingPosition);
        button = qobject_cast<QToolButton *>(action->associatedWidgets().last());
        button->hide();
        connect(this, &QLineEdit::textChanged, this, &LineEdit::onTextChanged);
        connect(button, &QToolButton::clicked, this, &QLineEdit::clear);
    }
private slots:
    void onTextChanged(const QString & text){
        button->setVisible(!text.isEmpty());
    }
private:
    QToolButton *button;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QComboBox combo;
    combo.setEditable(true);
    combo.setLineEdit(new LineEdit);
    combo.show();
    return a.exec();
}
#include "main.moc"
#包括
类LineEdit:公共QLineEdit
{
Q_对象
公众:
LineEdit(QWidget*parent=nullptr):
QLineEdit(父级)
{
QAction*action=addAction(QIcon(:/clear.png),QLineEdit::TrailingPosition);
button=qobject_cast(操作->关联小部件().last());
按钮->隐藏();
连接(this,&QLineEdit::textChanged,this,&LineEdit::onTextChanged);
连接(按钮,&QToolButton::单击,此,&QLineEdit::清除);
}
专用插槽:
void onTextChanged(常量QString&text){
按钮->设置可见(!text.isEmpty());
}
私人:
QToolButton*按钮;
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
combo.setEditable(真);
combo.setLineEdit(新建LineEdit);
combo.show();
返回a.exec();
}
#包括“main.moc”

另一个选项:自定义样式
#包括
类ClearLineEditStyle:公共QProxyStyle{
公众:
使用QProxyStyle::QProxyStyle;
QPixmap standardPixmap(standardPixmap standardIcon,const QStyleOption*选项,const QWidget*小部件)const{
如果(标准图标==SP_LineEditClearButton){
返回QPixmap(“:/clear.png”);
}
返回QProxyStyle::standardPixmap(标准图标、选项、小部件);
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QComboBox组合;
ClearLineEditStyle*style=新的ClearLineEditStyle(combo.style());
组合。设置样式(样式);
combo.setEditable(真);
if(QLineEdit*le=combo.lineEdit())
le->setClearButtonEnabled(真);
combo.show();
返回a.exec();
}

非常感谢您的帮助。对不起,我忘了说,X按钮有一个
.png
文件(比如说
X.png
)。此按钮应具有透明背景(与上图完全相同)。所以我需要把这张图片作为按钮的背景。您的解决方案显示的标准X按钮不是我想要的。(我在上面更新)非常感谢你的帮助。对不起,我忘了说,X按钮有一个
.png
文件(比如说
X.png
)。此按钮应具有透明背景(与上图完全相同)。所以我需要把这张图片作为按钮的背景。您的解决方案显示的标准X按钮不是我想要的。(I上文更新)