【问题标题】:Qt 4.7 - Tooltips and QComboBox popup coming up blank under OS X 10.12Qt 4.7 - 在 OS X 10.12 下工具提示和 QComboBox 弹出窗口空白
【发布时间】:2017-05-10 01:57:04
【问题描述】:

环境

  • 在 OS X 10.6.8 下构建(在那里也可以正常工作。)
  • 在 OS X 10.12 下运行的应用程序
  • Qt 4.7(必须使用这个,10.6.8 遗留支持问题)
  • Qt Creator 2.1.0

问题

从 OS X 10.6.8 到 OS X 10.11,工具提示和 QComboBox 弹出菜单行为都很好。

在 10.12 下,工具提示和 QComboBox 弹出菜单的弹出功能是空白的。

工具提示是空白的黄色纸张,背景看起来正确,但没有文字。我在 Qt Designer 2 中设置工具提示内容;那里没什么好看的。而且在每种情况下都只是普通文本。

QComboBox 弹出菜单缺少文本和复选标记。当弹出窗口关闭时,小部件只显示一行,所选项目确实显示。您也可以指向它,滚动鼠标滚轮,项目按预期更改。它只是空白的项目的弹出列表。

对于 QComboBox 弹出菜单,下面是一个有问题的使用示例:

int index;
ui->fftSizecomboBox->addItem("2048 pts",  2048);
ui->fftSizecomboBox->addItem("4096 pts",  2048 * 2);
ui->fftSizecomboBox->addItem("8192 pts",  2048 * 4);
ui->fftSizecomboBox->addItem("16384 pts", 2048 * 8);
ui->fftSizecomboBox->addItem("32768 pts", 2048 * 16);
ui->fftSizecomboBox->addItem("64K pts",   2048 * 32);
ui->fftSizecomboBox->addItem("128K pts",  2048 * 64);
ui->fftSizecomboBox->addItem("256K pts",  2048 * 128);
ui->fftSizecomboBox->addItem("512K pts",  2048 * 256);
ui->fftSizecomboBox->addItem("1M pts",    2048 * 512);
ui->fftSizecomboBox->addItem("2M pts",    2048 * 1024);
ui->fftSizecomboBox->addItem("4M pts",    2048 * 2048);
index = ui->fftSizecomboBox->findData(m_FftSize);
if ((index < 0) || (index > 11))
{
    index = 1;
    m_FftSize = 4096;
}
ui->fftSizecomboBox->setCurrentIndex(index);

对我来说,这一切似乎都很普通。我不知道为什么它可以在所有其他 OS X 版本下运行而在 10.12 下运行

此外,在我编写的另一个应用程序中,我也使用 QComboBox 弹出菜单,它们在该应用程序中工作在 10.12 下,因此这也意味着这是我正在做的事情。

除了单击弹出菜单使其显示项目列表之外,它没有任何反应。我什至没有收到任何消息;当我退出对话框时,然后我查看它以查看选择是什么(或者我什至不这样做,如果对话框已被取消。)

我向 Apple 提交了一份错误报告,他们已经忽略了几个月,所以他们要么不在乎,要么不认为这是他们的问题(我猜可能不是,即使它只是出现在 OS X 10.12 中)当然,Apple 经常在操作系统中留下错误,所以就是这样。

[编辑 1]

我尝试了其他方法,看看它是否是调色板颜色问题,是加载带有富文本的工具提示之一,更改字体颜色,这样就不会只使用调色板颜色来完成绘画。在 10.6 下工作,但在 10.12 下工作,没有区别;工具提示同样空白。另外,我发现工具提示的背景颜色也不是它应该是的淡黄色——它是白色的。

一旦工具提示/弹出菜单出现,系统就好像完全忘记了它应该做什么。

[编辑 2]

这是我用于 QComboBox 的样式表代码:

QComboBox::dropdown {
background: rgb(0,0,127);
color: rgb(0,255,0); /* color of dropped text*/
background-color: rgb(0,0,127); /* color of dropped backdrop*/
selection-color: rgb(0,255,0); /* color of sel text */
selection-background-color: rgb(0,0,0); /* color of sel backdrop */
}

QComboBox {
color: rgb(0,255,0); /* color of dropped text*/
background-color: rgb(0,0,0); /* color of dropped backdrop*/
selection-color: rgb(0,255,0); /* color of sel text */
selection-background-color: rgb(0,0,0); /* color of sel backdrop */
alternate-background-color: rgb(0,0,127);
alternate-selection=background-color: rgb(255,255,255);
}

此样式表在 10.6.8 下完全正确。在 10.12 下,主组合框正确呈现,黑色背景上的绿色文本,但弹出/下拉菜单是纯白色的,没有文本;它应该是中蓝色 (127) 上的绿色。除了选择了正确(不可见)的项目并且弹出菜单消失之外,在图形上也没有选择颜色或可见反应。

【问题讨论】:

  • “我向 Apple 提交了错误报告”,您可能是在“找错了树”。 Qt 不使用苹果的 nativ gui 元素,它只是用自己的东西模仿它们。您在新操作系统上使用旧版本的 Qt,所以我的钱花在 Qt 必须赶上平台支持。
  • 对;我不认为这是苹果,特别是。 AND 工具提示在测试应用程序中工作,相同的构建顺序:在 10.6 下构建,在 10.12 下工作。所以我的猜测是我踩到了什么东西或者做坏事。但我无法想象是什么,或者为什么。工具提示在 qt 中是非常不透明的东西。他们使用调色板的背景角色......没有什么比实际能够设置颜色更普通的了。
  • 现在我将专注于尝试在测试应用程序中重现它,尽可能简单。关注非工作生产代码和工作测试代码之间的区别。它最有可能是 GUI 的东西,例如模式窗口、多窗口、对话框等。只要您能够重现它,您就会知道哪里出了问题,或者至少您将拥有可靠的错误报告的基础。并不是说它会很快或每时每刻都被修复,但除非你能找到解决方法,否则就是这样。
  • 可能是你,也可能是实际生产代码中事物堆叠在一起的方式。错误通常需要特定的条件才能显现,有时会违反所有逻辑。就像前几天我发现了一个错误,您只需在源代码中移动一行不应该对应用程序产生任何影响的错误,只是为了更好地格式化代码,导致 GUI 完全破坏。
  • 我没有这个问题的答案,但如果你真的想弄清楚,不要忘记你可以从源代码构建 Qt,然后调试 Qt 源代码(通过调试器或通过将 printf's/etc 插入 Qt 源代码)。如果我正在调试它,我会先查看 qtbase/src/widgets/kernel/qtooltip.cpp 中的 QTipLabel::paintEvent() 方法,然后查看它调用的 Style::PE_PanelTipLabel 代码。

标签: c++ macos qt


【解决方案1】:

由于您的 Qt 版本已过时,可能是“本机”渲染引擎已损坏。 您可以改用“光栅”渲染引擎来避免此问题

http://doc.qt.io/qt-4.8/qapplication.html#setGraphicsSystem

【讨论】:

  • 不,我使用的是光栅引擎。好主意,不过。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多