【发布时间】:2013-12-31 12:56:42
【问题描述】:
在 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();
}
有什么方法可以修改(重新实现)QComboBox::showPopup 的 QWebViews (QtWebkit)?
Qt-BUG(建议): https://bugreports.qt.io/browse/QTBUG-35771
【问题讨论】:
-
你用的是什么风格?弹出窗口的显示方式,以及匹配的视图是否具有与组合框相同的大小或允许更大,完全取决于所使用的样式。
-
... 它还告诉您如何修复它:请参阅
QComboBox::showPopup代码并使用 QProxyStyle 转移正确的调用。当然,所有这些都是假设 QWebView 使用的是 QComboBox,而不是类似于 QComboBox... -
您是否可以访问您希望显示此
ComboBox的HTML 文件,或者您无法控制QWebView显示的内容?因为我实现了一个组合框,它使用您的自定义QComboBox到QWebView但它仅在 HTML 页面使用特定代码时才有效,而不是<select>代码来显示ComboBox。 -
@user2014561 我正在开发浏览器而不是特定的应用程序。我需要访问任何网站,如 Firefox/InternetExplorer/Chrome 浏览器(我的意思是组合框,就像我发布的屏幕截图:i.stack.imgur.com/VOn9w.png)。谢谢
-
@peppe 感谢您的评论,我可以找到解决方案。
标签: c++ qt qtwebkit qcombobox qtgui