Kap*_*a11 3 qt qcombobox drop-down-menu
我创建了一个可编辑的 QCombobox,通过以下方式存储最后的输入:
\n\nQComboBox* input = new QComboBox();\ninput->setEditable(true);\ninput->completer()->setCompletionMode(QCompleter::PopupCompletion);\ninput->setMaxCount(5);\nRun Code Online (Sandbox Code Playgroud)\n\n现在我有两个问题:
\n\n我想将下拉菜单的大小限制为最后 5 个输入字符串。
这 5 个旧输入将全部显示在顶部的可编辑行下方。目前,旧的输入隐藏可编辑行。
对于第一个方面,调用 \xe2\x80\x99setMaxCount(5)\xe2\x80\x99 使 QComboBox 显示插入的前5 个项目,但我希望它显示最后5 个项目。
\n\n对于第二个方面,我需要按照我的想法改变风格。所以改变某事。像这些参数:
\n\n setStyleSheet("QComboBox::drop-down {\\\n subcontrol-origin: padding;\\\n subcontrol-position: bottom right;\\\n }");\nRun Code Online (Sandbox Code Playgroud)\n\n但我不知道要更改哪些参数,只有最后 5 个条目全部显示在 QComboBox 的输入行下。
\n\n编辑
\n\n这是下拉菜单如何显示的两张图片。如您所见,我输入了 5 个条目,但编辑行被弹出窗口隐藏了:\n
在第二张图片中,编辑行位于标记条目“5”的后面。
\n为了只保留最后 5 个项目,您可以先监听您QComboBox的QLineEdit信号editingFinished()。当信号发出时,您可以检查项目计数,如果计数为 6,则删除最旧的项目。
要重新定位下拉菜单,您必须子类化QComboBox并重新实现该showPopup()方法。从那里您可以指定如何移动弹出菜单。
下面是一个类,您可以简单地将其粘贴到 mainwindow.h 中:
#include <QComboBox>
#include <QCompleter>
#include <QLineEdit>
#include <QWidget>
class MyComboBox : public QComboBox
{
Q_OBJECT
public:
explicit MyComboBox(QWidget *parent = 0) : QComboBox(parent){
setEditable(true);
completer()->setCompletionMode(QCompleter::PopupCompletion);
connect(lineEdit(), SIGNAL(editingFinished()), this, SLOT(removeOldestRow()));
}
//On Windows this is not needed as long as the combobox is editable
//This is untested since I don't have Linux
void showPopup(){
QComboBox::showPopup();
QWidget *popup = this->findChild<QFrame*>();
popup->move(popup->x(), popup->y()+popup->height());
}
private slots:
void removeOldestRow(){
if(count() == 6)
removeItem(0);
}
};
Run Code Online (Sandbox Code Playgroud)
这将两种解决方案合并为一类。只需将其添加到您的项目中,然后更改您的QComboBox声明:
QComboBox* input = new QComboBox();
input->setEditable(true);
input->completer()->setCompletionMode(QCompleter::PopupCompletion);
input->setMaxCount(5);
Run Code Online (Sandbox Code Playgroud)
对此:
MyComboBox* input = new MyComboBox();
Run Code Online (Sandbox Code Playgroud)
我使用的是 Windows,因此无法测试下拉重新定位的确切结果,但我认为它会起作用。请测试它并让我知道它的行为是否如您所愿。
| 归档时间: |
|
| 查看次数: |
2630 次 |
| 最近记录: |