在Firefox/Chrome/InternetExplorer/Safari/Opera中,来自下拉框的弹出窗口会随着内容而扩展,如Firefox图片所示:
QComboBox
的弹出窗口不会扩展内容。由于QComboBox
大小的限制,弹出窗口受到限制,见QWebView图片:
因此我实现了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();
}
有没有办法修改(重新实现)QtWebkit中
QWebViews
的QComboBox :: showPopup
?
Qt-BUG(建议):https://bugreports.qt.io/browse/QTBUG-35771
QComboBox::showPopup
代码并使用一个QProxyStyle来转移正确的调用。当然,所有这些都是假设QWebView正在使用QComboBox,而不是类似于QComboBox的其他东西... - peppe