Russian Qt Forum
Ноябрь 14, 2024, 20:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox + QTreeView  (Прочитано 3153 раз)
mugabe
Гость
« : Май 12, 2009, 06:58 »

Пытаюсь сделать комбобокс с деревом. После первого наступания на грабли решил поискать в интернетах, и нашел такую реализацию:
Код
C++ (Qt)
class TreeComboBox : public QComboBox
{
public:
   TreeComboBox(QWidget* parent = 0) : QComboBox(parent), skipNextHide(false)
   {
       QTreeView* v = new QTreeView(this);
       setView(v);
       v->header()->hide();
       v->viewport()->installEventFilter(this);
   }
 
   bool eventFilter(QObject* object, QEvent* event)
   {
       if (event->type() == QEvent::MouseButtonPress && object == view()->viewport())
       {
           QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
           QModelIndex index = view()->indexAt(mouseEvent->pos());
           if (!view()->visualRect(index).contains(mouseEvent->pos()))
               skipNextHide = true;
       }
       return false;
   }
 
   virtual void showPopup()
   {
       setRootModelIndex(QModelIndex());
       QComboBox::showPopup();
   }
 
   virtual void hidePopup()
   {
       setRootModelIndex(view()->currentIndex().parent());
       setCurrentIndex(view()->currentIndex().row());
 
       if (skipNextHide)
           skipNextHide = false;
       else
           QComboBox::hidePopup();
   }
 
private:
   bool skipNextHide;
};
 

Но здесь тоже оказались грабли. При выборе элемента из дерева выбирается совсем не то, что хотелось.
Если убрать первые две строчки из hidePopup() то все более менее нормализуется, но только если комбобокс нередактируемый. Стоит сделать setEditable(true) поведение становится совершенно другим.

Других реализаций пока не нашел.

Может быть кто-то делал подобное уже? Поделитесь решением.
Записан
miha-ha
Гость
« Ответ #1 : Август 07, 2009, 08:00 »

Проблема актуальна!!!
Никто не сталкивался?

Необходимо и размер viewPort изменять при разворачивании ветки.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.189 секунд. Запросов: 21.