草庐IT

c++ - Qt widget 背景从 Linux 到 Windows 不同

coder 2024-06-21 原文

我要实现一个跨平台的 Qt 程序。我有一个我不明白的问题:当程序在 Windows 上执行时,某些小部件的背景颜色不正确。首先,我用 C++ 编写的程序得到了完全相同的结果,所以我认为这不是 Python 特有的问题。

我将我的代码简化为一个显示“错误”的简单程序。我不确定是哪个小部件导致的,所以我简单地包含了实际程序中使用的所有元素。

这是它在 Linux 上的样子:

这是背景错误的 Windows 渲染:

代码如下:

import sys
from PyQt4.QtGui import QApplication, QMainWindow, QVBoxLayout, QTabWidget, QWidget, \
                        QGroupBox, QVBoxLayout, QScrollArea, QFrame, QHBoxLayout, \
                        QGridLayout, QLabel

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        mainWidget = QWidget(self)
        layout = QVBoxLayout(mainWidget)
        self.setCentralWidget(mainWidget)
        self.tabWidget = QTabWidget(self)
        layout.addWidget(self.tabWidget)
        self.scorePage = ScorePage()
        self.tabWidget.addTab(self.scorePage, 'Some Tab')
        self.scorePage.reload()

class GameWidget(QWidget):
    def __init__(self):
        super(GameWidget, self).__init__()
        layout = QGridLayout(self)
        boogerLabel = QLabel(self)
        boogerLabel.setText('Some Text')
        layout.addWidget(boogerLabel, 0, 0)

class ScorePage(QWidget):
    def __init__(self):
        super(ScorePage, self).__init__()
        layout = QVBoxLayout(self)
        self.scoreBox = QGroupBox(self)
        self.scoreBoxLayout = QVBoxLayout(self.scoreBox)
        layout.addWidget(self.scoreBox)
        self.scoreBoxScroll = QScrollArea(self.scoreBox)
        self.scoreBoxScroll.setFrameShape(QFrame.NoFrame)
        self.scoreBoxLayout.addWidget(self.scoreBoxScroll)
        self.scoreBoxWidget = QWidget(self)

    def reload(self):
        self.scoreBoxWidget.deleteLater()
        self.scoreBoxWidget = QWidget(self)
        self.scoreBoxWidgetLayout = QHBoxLayout(self.scoreBoxWidget)
        newGame = GameWidget()
        self.scoreBoxWidgetLayout.addWidget(newGame)
        self.scoreBoxScroll.setWidget(self.scoreBoxWidget)
        self.scoreBoxWidget.setAutoFillBackground(False)

def main(argv):
    app = QApplication(sys.argv, True)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main(sys.argv)

如何获取和设置正确的背景颜色(来自 QGroupBox 的颜色)?

在此先感谢您提供的所有帮助!

最佳答案

嘿,前段时间我遇到了类似的问题,我通过添加与默认不同的窗口样式来解决这个问题:

这是我的主要示例,它可以按您的需要工作:

def main(argv):
    app = QApplication(sys.argv, True)
    from platform import system
    if system() == "Windows":
        app.setStyle(QStyleFactory.create("windows"))
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

QStyleFactory 在 QtGui 中所以你必须扩展你的导入

关于c++ - Qt widget 背景从 Linux 到 Windows 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012224/

有关c++ - Qt widget 背景从 Linux 到 Windows 不同的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  4. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  6. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  9. java - 为什么 ruby​​ modulo 与 java/other lang 不同? - 2

    我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.

  10. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

随机推荐