From 86fb68f305ab41d27a0bd6980897826ea47cae54 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 25 Nov 2018 21:55:19 +0000 Subject: [PATCH] Set foreign key item delegate references key values combo box size according to contents --- item_delegates/ForeignKeyDelegate.cpp | 22 +++++++++++++++++++++- item_delegates/ForeignKeyDelegate.hpp | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/item_delegates/ForeignKeyDelegate.cpp b/item_delegates/ForeignKeyDelegate.cpp index 09df6a731..204738163 100644 --- a/item_delegates/ForeignKeyDelegate.cpp +++ b/item_delegates/ForeignKeyDelegate.cpp @@ -1,7 +1,10 @@ #include "ForeignKeyDelegate.hpp" +#include #include - +#include +#include +#include #include "CandidateKeyFilter.hpp" ForeignKeyDelegate::ForeignKeyDelegate (QAbstractItemModel const * referenced_model @@ -40,3 +43,20 @@ QWidget * ForeignKeyDelegate::createEditor (QWidget * parent editor->setSizeAdjustPolicy (QComboBox::AdjustToContents); return editor; } + +QSize ForeignKeyDelegate::sizeHint (QStyleOptionViewItem const& option, QModelIndex const& index) const +{ + auto size_hint = QStyledItemDelegate::sizeHint (option, index); + QFontMetrics metrics {option.font}; + QStyleOptionComboBox combo_box_option; + combo_box_option.rect = option.rect; + combo_box_option.state = option.state | QStyle::State_Enabled; + for (auto row = 0; row < candidate_key_filter_->rowCount (); ++row) + { + size_hint = size_hint.expandedTo (qApp->style ()->sizeFromContents (QStyle::CT_ComboBox + , &combo_box_option + , {metrics.width (candidate_key_filter_->data (candidate_key_filter_->index (row, 0)).toString ()) + , metrics.height ()})); + } + return size_hint; +} diff --git a/item_delegates/ForeignKeyDelegate.hpp b/item_delegates/ForeignKeyDelegate.hpp index 01b03ee5b..4f58f4608 100644 --- a/item_delegates/ForeignKeyDelegate.hpp +++ b/item_delegates/ForeignKeyDelegate.hpp @@ -33,9 +33,10 @@ public: , int referencing_key_role = Qt::EditRole); ~ForeignKeyDelegate (); - QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const&, QModelIndex const&) const override; - private: + QWidget * createEditor (QWidget * parent, QStyleOptionViewItem const&, QModelIndex const&) const override; + QSize sizeHint (QStyleOptionViewItem const&, QModelIndex const&) const override; + QScopedPointer candidate_key_filter_; };