2013-12-12 10 views
9

In Firefox/Chrome/Internetexplorer/Safari/Oper Pop-ups aus dem Combobox als Inhalt erweitern, sehen Firefox Bild:"QComboBox Pop-up" erweitert und QtWebKit

Firefox combobox

QComboBox pop -up erweitert den Inhalt nicht. Pop-ups sind durch die Größe von QComboBox begrenzt, siehe QWebView Bild:

Qt and QtWebkit combobox

So implementiert ich die 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(); 
} 

Gibt es eine Möglichkeit die QComboBox::showPopup von QWebViews (QtWebkit) ändern (neu implementieren)?

Qt-BUG (Vorschlag):https://bugreports.qt.io/browse/QTBUG-35771

+0

Welchen Stil verwenden Sie? Wie das Popup angezeigt wird und ob die passende Ansicht die gleiche Größe der Combobox hat oder größer sein darf, hängt vollständig vom verwendeten Stil ab. – peppe

+2

... was Ihnen auch sagt, wie Sie es beheben können: siehe 'QComboBox :: showPopup' Code und verwenden Sie einen QProxyStyle, der die richtigen Aufrufe umleitet. Natürlich ist all dies unter der Annahme, dass QWebView eine QComboBox verwendet, und nicht etwas, das * ähnelt * a QComboBox ... – peppe

+0

Waren Sie schon in der HTML-Datei zugreifen, die Sie zeigt diese 'ComboBox' erwarten, oder Sie haben keine Kontrolle für was wird von der 'QWebView' gezeigt? Weil ich eine ComboBox implementiert, die Ihre benutzerdefinierten verwendet 'QComboBox' in eine' QWebView' aber nur funktionieren, wenn die HTML-Seite einen bestimmten Code verwenden, nicht die ''