gpt4 book ai didi

c++ - 有没有标准的方法可以在没有 QCompleter 的情况下从 QLineEdit 创建下拉菜单?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:09 28 4
gpt4 key购买 nike

是否有任何标准方法可以在没有 QCompleter 的情况下从 QLineEdit 创建下拉菜单?例如,使用 QMenu 或创建自己的类。或者还有其他现有的小部件吗?

或者我应该为 QCompleter 使用 QAbstractItemModel?想了想,其实对这个QAbstractItemModel不是很理解。如果您有这样创建菜单的经验,也请帮助我。

所以我需要一种常见的下拉菜单类型:带线条的菜单,每个菜单本身都包含图标(QPixmap)和文本(QLabel)。就像在 Opera 或 Chrome 浏览器中的地址输入行,如 Apple Spotlight 的右侧部分等。

最佳答案

QMenu 是不可能的,因为它在显示时获得焦点,在失去焦点时隐藏。但是,可以为此使用 QListWidget(或任何其他常规小部件)。我为概念验证开发了一些工作示例。它是默认的 Qt Widget 项目,以 QMainWindow 作为主窗口。您需要将名称为 "lineEdit" 的 QLineEdit 添加到其中,并为 textChanged signa 创建插槽。这是代码:

MainWindow.h:

class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_lineEdit_textChanged(const QString &arg1);
private:
Ui::MainWindow *ui;
QListWidget* list;
};

MainWindow.cpp:

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
list(new QListWidget)
{
ui->setupUi(this);
list->setWindowFlags(Qt::WindowFlags(
Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint));
list->setAttribute(Qt::WA_ShowWithoutActivating);
}

MainWindow::~MainWindow() {
delete list;
delete ui;
}

void MainWindow::on_lineEdit_textChanged(const QString &arg1) {
if (ui->lineEdit->text().isEmpty()) {
list->hide();
return;
}
list->clear();
list->addItem(ui->lineEdit->text());
list->addItem(tr("Google: ") + ui->lineEdit->text());
list->move(ui->lineEdit->mapToGlobal(QPoint(0, ui->lineEdit->height())));
if (!list->isVisible()) list->show();
}

有几个问题:当行编辑失去焦点或用户移动窗口时你应该隐藏菜单,你不能在行编辑中使用向下箭头按钮将焦点设置在菜单上,等等。但我相信所有这些问题都可以解决很容易。

关于c++ - 有没有标准的方法可以在没有 QCompleter 的情况下从 QLineEdit 创建下拉菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com