2013-12-12 7 views
9

В Firefox/Chrome/InternetExplorer/Safari/Opera всплывающих окнах от комбобокса расширить как содержание, см Firefox изображения:"QComboBox Всплывающее" расширяется и QtWebKit

Firefox combobox

QComboBox поп -up не расширяет содержимое. всплывающих окон ограничены размером QComboBox см QWebView картины:

Qt and QtWebkit combobox

Я Реализована QComboBox :: showPopup:

void newQComboBox::showPopup() { 
    int width = this->width(); 
    this->view()->setTextElideMode(Qt::ElideNone); 

    const int iconSize = this->iconSize().width(); 
    const QFontMetrics fontMetrics = this->fontMetrics(); 
    const int j = this->count(); 

    for(int i=0; i < j; ++i) { 
     const int textWidth = fontMetrics.width(this->itemText(i) + "WWW"); 
     if (this->itemIcon(i).isNull()) { 
      width = qMax(width, textWidth); 
     } else { 
      width = qMax(width, textWidth + iconSize); 
     } 
    } 

    QStyleOptionComboBox opt; 
    this->initStyleOption(&opt); 
    QSize size(width, 0); 
    size = this->style()->sizeFromContents(QStyle::CT_ComboBox, &opt, size, this); 

    this->view()->setFixedWidth(width); 

    QComboBox::showPopup(); 
} 

Есть ли способ изменить (переопределить) QComboBox::showPopup от QWebViews (QtWebkit)?

Qt-BUG (предложение):https://bugreports.qt.io/browse/QTBUG-35771

+0

Какой стиль вы используете? Как показано всплывающее окно, и если совпадающий вид имеет одинаковый размер выпадающего списка или ему разрешено быть больше, он полностью зависит от используемого стиля. – peppe

+2

... который также сообщает вам, как его исправить: см. Код 'QComboBox :: showPopup' и используйте QProxyStyle, отменяя правильные вызовы. Конечно, все это предполагает, что QWebView использует QComboBox, а не что-то, что * напоминает * QComboBox ... – peppe

+0

Имеете ли вы доступ к HTML-файлу, который вы ожидаете отображать этот «ComboBox», или у вас нет контроля за то, что показывает «QWebView»? Поскольку я реализовал ComboBox, который использует ваш пользовательский 'QComboBox' в' QWebView', но он работает, только если HTML-страница использует определенный код, а не код '