2013-12-12 16 views
9

Trong Firefox/Chrome/InternetExplorer/Safari/Opera pop-up từ combobox mở rộng như nội dung, xem Firefox ảnh:"QComboBox Pop-up" mở rộng và QtWebkit

Firefox combobox

QComboBox pop -up không mở rộng nội dung. Pop-up được giới hạn bởi kích thước của QComboBox, xem QWebView ảnh:

Qt and QtWebkit combobox

Vì vậy, tôi thực hiện các 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(); 
} 

Có cách nào để sửa đổi (reimplement) QComboBox::showPopup của QWebViews (QtWebkit)?

Qt-BUG (gợi ý):https://bugreports.qt.io/browse/QTBUG-35771

+0

Bạn đang sử dụng kiểu nào? Cách hiển thị cửa sổ bật lên và nếu chế độ xem phù hợp có cùng kích thước của combobox hoặc được phép lớn hơn, phụ thuộc hoàn toàn vào kiểu được sử dụng. – peppe

+2

... cũng cho bạn biết cách khắc phục: xem mã 'QComboBox :: showPopup' và sử dụng QProxyStyle chuyển hướng các cuộc gọi phù hợp. Tất nhiên, tất cả điều này là giả định rằng QWebView đang sử dụng một QComboBox, và không phải cái gì đó * giống * một QComboBox ... – peppe

+0

Bạn có truy cập vào tệp HTML mà bạn mong đợi để hiển thị 'ComboBox' này, hoặc bạn không có quyền kiểm soát cho những gì đang được hiển thị bởi 'QWebView'? Bởi vì tôi đã thực hiện một ComboBox sử dụng tùy chỉnh 'QComboBox' của bạn vào một' QWebView' nhưng nó chỉ hoạt động nếu trang HTML sử dụng một mã cụ thể, không phải là mã '