c++编写为一个qlineedit添加点击出现QAbstractItemView,QAbstractItemView的每个选项包含一个icon和一个qstring
时间: 2023-07-16 10:14:39 浏览: 76
C++/ qt 编写一个简单计算器
可以通过继承QLineEdit类并重写mousePressEvent()方法实现该功能。具体步骤如下:
1. 创建一个类,继承自QLineEdit。
2. 在类的构造函数中,创建一个QCompleter对象,并设置其模型和父对象。
3. 将QCompleter对象设置为QLineEdit的自动完成器。
4. 重写mousePressEvent()方法,当用户点击QLineEdit时,弹出QCompleter的下拉列表。
5. 在QCompleter的模型中添加每个选项的icon和qstring。
以下是示例代码:
```c++
#include <QtWidgets>
class MyLineEdit : public QLineEdit
{
public:
MyLineEdit(QWidget *parent = nullptr)
: QLineEdit(parent)
{
// 创建一个QCompleter对象
m_completer = new QCompleter(this);
// 设置模型
QStringListModel *model = new QStringListModel(this);
model->setStringList(QStringList() << "Option 1" << "Option 2" << "Option 3");
m_completer->setModel(model);
// 设置父对象
m_completer->setParent(parent);
// 设置自动完成器
setCompleter(m_completer);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
// 当用户点击QLineEdit时,弹出QCompleter的下拉列表
QLineEdit::mousePressEvent(event);
if (event->button() == Qt::LeftButton) {
m_completer->complete(rect());
}
}
private:
QCompleter *m_completer;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget widget;
QVBoxLayout *layout = new QVBoxLayout(&widget);
MyLineEdit *lineEdit = new MyLineEdit(&widget);
layout->addWidget(lineEdit);
widget.show();
return app.exec();
}
```
在该示例代码中,QCompleter的模型使用了QStringListModel,并设置了三个选项,每个选项为一个qstring。如果需要添加icon,可以使用QStandardItemModel,并设置每个选项的图标和文本。
阅读全文