• 9735阅读
  • 9回复

自定义一个类似ComboBox的控件 [复制链接]

上一主题 下一主题
离线北落师门
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-30
功能:类似搜索引擎框的 输入关键词后 下拉框会自动弹出可能的关键词 选择其中一个以后填到框里面

本来想用comboBox实现的 后来发现下拉的弹出和输入不能同时进行。。
所以要自定义一个
用lineEdit作输入 ListWidget作下拉的那个列表显示的
现在的问题是,怎么做到把这整个控件放到另一个Widget上时,下拉的那个框弹出能直接把下面的比如按钮这些覆盖掉,而不是我现在的自动伸展出来,下面的按钮自动往下移了。
自定义控件里lineEdit 和 listWidget 我是用layout布局的。
谢谢
离线dbzhang800

只看该作者 1楼 发表于: 2009-10-30
不是使用布局

创建类型为 Qt::Popup 的窗口,并显示在合适的位置
离线jorneyr

只看该作者 2楼 发表于: 2009-10-30
QCombobox::setEditable(true); // 设置为可编辑的
然后使用QCompleter加入QComboBox, 就可以实现你的功能了。
离线hiti_tony
只看该作者 3楼 发表于: 2009-10-30
2  楼正解
离线北落师门
只看该作者 4楼 发表于: 2009-10-30
引用第1楼dbzhang800于2009-10-30 13:36发表的  :
不是使用布局
创建类型为 Qt::Popup 的窗口,并显示在合适的位置

PopUp弹出来的为什么原来的lineEdit又不能继续输入了  而且这个屏幕的位置 一直搞不定。
还有2楼没明白我的意思,我不要自动补全,只要提示就可以了(继续输入则更新提示) 直到用户看到一个满意的单击以后放到Edit框里 就是类似搜索引擎框里的联想功能
难道这个功能只能在网页上实现吗。。。。有没有高手直接帮我写下这个控件 对外提供ItemClicked(QString)和editTextChange(QString) 2个信号就可以了
以及clearAllItems和addItems(QString)  getCurrentEditText  3个函数,Item是QString类型
离线jorneyr

只看该作者 5楼 发表于: 2009-10-30
如下代码:

#include <QtGui/QApplication>
#include <QtGui>
#include <QCompleter>
#include <QStringList>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QStringList sl = QStringList() << "Biao" << "Bin" << "Huang" << "Hua";
    QCompleter c(sl);
    QLineEdit edit;
    edit.setCompleter(&c);
    edit.show();

    return a.exec();
}

输入B或者H你就知道了。
离线北落师门
只看该作者 6楼 发表于: 2009-10-30
引用第5楼jorneyr于2009-10-30 19:45发表的  :
如下代码:
#include <QtGui/QApplication>
#include <QtGui>
#include <QCompleter>
.......

太伟大了。。。误解你了 。。原来LineEdit就有这个功能
不过有个问题我要匹配不单单是开头相同,只要包含这个子串就要显示出来,应该是在QCompleter里设置的吧  你知道的话 简单说下吧   懒得help里找了
离线jorneyr

只看该作者 7楼 发表于: 2009-10-31
自动完成的QLineEdit(非使用QCompleter版): http://www.cppblog.com/biao/archive/2009/10/31/99873.html
离线北落师门
只看该作者 8楼 发表于: 2009-10-31
引用第7楼jorneyr于2009-10-31 02:10发表的  :
自动完成的QLineEdit(非使用QCompleter版): http://www.cppblog.com/biao/archive/2009/10/31/99873.html

太感谢了。。。。凌晨了还帮我写了下  连键盘按下也考虑了 很好用 谢谢
离线北落师门
只看该作者 9楼 发表于: 2009-10-31
刚刚发现了个小问题
用英文输入的没问题
(main.cpp里关键词换成中文就出问题了,比如有“好的”,"好吧",2个关键词,开始输了“好”,出来2个选项,然后输"的" 却没有更新,直接输“好的”,然后把“的”删除倒是能更新)

很奇怪
我把这段
    if ((text.length() > 1) && (!listView->isHidden()))
    {
        return;
    }
注释掉又正常了
快速回复
限100 字节
 
上一个 下一个