C++ 如何在ComboBox的编辑字段中创建按钮?
要求是当我们在ComboBox中键入内容时,此字段右侧会出现一个X按钮(以删除我们键入的内容)。我该怎么做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
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上文更新)