#include "qcomboxwidget.h"
#include "ui_qcomboxwidget.h"
#include <QKeyEvent>
#include <QLineEdit>
QComboxWidget::QComboxWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::QComboxWidget)
{
ui->setupUi(this);
ui->comboBox->lineEdit()->setText("");
ui->comboBox->lineEdit()->setClearButtonEnabled(true);
ui->listWidget->setSizeAdjustPolicy(QListView::AdjustToContents);
ui->listWidget->setVisible(false);
setMinimumWidth(220);
adjustSize();
// setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
connect(ui->comboBox->lineEdit(),SIGNAL(textChanged (const QString & )),this,SLOT(OnRadarChange(const QString & )));
vtCity.push_back("beijing1");
vtCity.push_back("beijing2");
vtCity.push_back("beijing3");
vtCity.push_back("beijing4");
vtCity.push_back("beijing5");
vtCity.push_back("beijing6");
vtCity.push_back("beijing7");
vtCity.push_back("beijing8");
vtCity.push_back("beijing9");
vtCity.push_back("bengbu");
vtCity.push_back("baise");
vtCity.push_back("hailaer");
}
QComboxWidget::~QComboxWidget()
{
delete ui;
}
void QComboxWidget::keyPressEvent ( QKeyEvent * keyevent )
{
if(QApplication::focusWidget() != ui->comboBox->lineEdit() || ui->listWidget->count() == 0)return;
int uKey = keyevent->key();
Qt::Key key = static_cast<Qt::Key>(uKey);
int iIndex = ui->listWidget->currentRow ();
if(key == Qt::Key_Up)
{
iIndex--;
if(iIndex < 0) iIndex = 0;
QListWidgetItem *pItem = ui->listWidget->item(iIndex);
// pItem->setForeground(Qt::red);
ui->listWidget->setCurrentItem(pItem);
}
else if (key == Qt::Key_Down)
{
iIndex++;
if(iIndex >= ui->listWidget->count()) iIndex = ui->listWidget->count() - 1;
QListWidgetItem *pItem = ui->listWidget->item(iIndex);
ui->listWidget->setCurrentItem(pItem);
}
else if (key == Qt::Key_Enter || key == Qt::Key_Return)
{
ui->comboBox->lineEdit()->setText(ui->listWidget->currentItem()->text());
}
}
void QComboxWidget::OnRadarChange(const QString &strText)
{
ui->listWidget->clear();
if (!ui->comboBox->lineEdit()->text().isEmpty())
{
for(int i = 0;i < vtCity.size();++i)
{
if (vtCity[i].indexOf(strText) != -1)
{
ui->listWidget->addItem(vtCity[i]);
}
}
}
if (ui->listWidget->count() > 0)
{
ui->listWidget->setVisible(true);
}
else
{
ui->listWidget->setVisible(false);
setMaximumHeight(ui->comboBox->lineEdit()->height());
adjustSize();
}
}