completer->setModel(model); 添加icon和qstring
时间: 2023-07-16 16:13:49 浏览: 53
您可以使用`QStandardItemModel`来为每个项目添加图标和字符串。以下是一个示例代码:
```cpp
QStandardItemModel *model = new QStandardItemModel();
QStandardItem *item = new QStandardItem(QIcon(":/icons/myicon.png"), "My Text");
model->appendRow(item);
completer->setModel(model);
```
这将在自动完成下拉列表中添加一个具有指定图标和文本的项目。请确保将 `myicon.png` 图像文件添加到您的项目资源中,并使用正确的文件路径进行引用。
相关问题
c++编写为一个qlineedit添加点击出现QAbstractItemView,QAbstractItemView的每个选项包含一个icon和一个qstring
可以通过继承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,并设置每个选项的图标和文本。
qcombobox popup设置border-radius
QComboBox的下拉框样式设置border-radius属性后出现黑色边角是因为QComboBox的view窗口属性干扰导致的。为了解决这个问题,你需要设置view窗口的属性以使样式生效。你可以使用以下代码进行设置:
```cpp
ui->comboBox_rand->view()->window()->setWindowFlags(Qt::Popup|Qt::FramelessWindowHint|Qt::NoDropShadowWindowHint);
ui->comboBox_rand->view()->window()->setAttribute(Qt::WA_TranslucentBackground);
```
此外,如果你想要给下拉框添加边缘阴影效果,你可以使用以下代码:
```cpp
QGraphicsDropShadowEffect *shadowRand = new QGraphicsDropShadowEffect(this);
shadowRand->setOffset(0, 0);
shadowRand->setColor(QColor("#444444"));
shadowRand->setBlurRadius(15);
ui->comboBox_rand->view()->setGraphicsEffect(shadowRand);
```
你可以参考这篇博客文章了解更多关于QComboBox样式的信息:https://www.cnblogs.com/csuftzzk/p/qss_combobox.html
另外,如果你想要实现QCompleter的自动补全下拉列表样式,你可以通过completer->popup()进行设置。具体代码参考以下示例:
```cpp
Widget::Widget(QWidget *parent) : QWidget(parent) {
word_list << "Java" << "C" << "C#" << "PHP" << "Perl" << "Python" << "Delphi" << "Ruby";
search_line_edit = new QLineEdit(this);
completer = new QCompleter(this);
string_list_model = new QStringListModel(word_list, this);
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setModel(string_list_model);
search_line_edit->setCompleter(completer);
connect(search_line_edit, SIGNAL(editingFinished()), this, SLOT(editComplete()));
}
void Widget::editComplete() {
QString text = search_line_edit->text();
if (QString::compare(text, QString("")) != 0) {
bool is_contains = word_list.contains(text, Qt::CaseInsensitive);
if (!is_contains) {
word_list << text;
string_list_model->setStringList(word_list);
//completer->setModel(new QStringListModel(wordList, this));
}
}
}
```