【问题标题】:QComboBox dropdown not proper on LinuxQComboBox 下拉菜单在 Linux 上不正确
【发布时间】:2021-06-28 02:42:35
【问题描述】:

在 Windows 上: 当我从不可编辑的组合框下拉菜单中选择任何项目时,每次下拉菜单都会向下打开,因为这是 QT 在 Windows 上本机实现它的方式。

在 Linux 上: 当我从下拉列表中选择第一个项目时,它会向下打开,但是如果我选择任何其他项目然后再次打开下拉菜单,那么它不会完全向下扩展,有些条目是向上的,有些是向下的,因为 Linux 的原生主题.

有什么简单的方法让它类似于windows,以便整个下拉菜单向下打开?

【问题讨论】:

  • 尝试here显示的解决方案。

标签: c++ linux qt pyqt5 qcombobox


【解决方案1】:

此行为不取决于操作系统,而是取决于所使用的 QStyle(例如,我使用 KDE Plasma 提供的具有您想要的行为的样式,但如果我使用融合样式,那么我会得到您不想要的行为'不想要)。所以考虑到上述情况,一个可能的解决方案是在弹出窗口显示后修改它的位置。

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class ComboBox(QtWidgets.QComboBox):
    def showPopup(self):
        super().showPopup()
        container = self.view().parentWidget()
        gp = self.mapToGlobal(self.rect().bottomLeft())
        container.move(gp)


def main():
    app = QtWidgets.QApplication(sys.argv)
    combo = ComboBox()
    combo.addItems([f"item {i}" for i in range(4)])
    combo.show()
    ret = app.exec_()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

【讨论】:

  • 值得注意的是,Qt 对当前的 QScreen 进行了一些检查,以避免显示超出屏幕几何形状的弹出窗口。
猜你喜欢
  • 2023-04-10
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
相关资源
最近更新 更多