Raspberry pi LXSession上的Qt4 WindowsStationTop

Raspberry pi LXSession上的Qt4 WindowsStationTop,raspberry-pi,pyqt4,qt4,x11,Raspberry Pi,Pyqt4,Qt4,X11,我正在raspberry pi上运行一个应用程序,它使用qt4。我的应用程序有不同的窗口、主窗口和对话框。当我在raspberry pi桌面上运行我的应用程序时,它工作正常,若我点击主窗口,对话框不会出现在主窗口后面 Qt.WindowStaysOnTopHint工作正常Qt.WindowStaysOnTopHint确保该窗口位于主窗口的顶部,并且不会以无法访问它而结束 在lxsession上运行应用程序时,自动启动 Qt.WindowStaysOnTopHint 工具不工作 你知道怎么解决吗

我正在raspberry pi上运行一个应用程序,它使用qt4。我的应用程序有不同的窗口、主窗口和对话框。当我在raspberry pi桌面上运行我的应用程序时,它工作正常,若我点击主窗口,对话框不会出现在主窗口后面

Qt.WindowStaysOnTopHint
工作正常
Qt.WindowStaysOnTopHint
确保该窗口位于主窗口的顶部,并且不会以无法访问它而结束

在lxsession上运行应用程序时,自动启动

Qt.WindowStaysOnTopHint

工具不工作

你知道怎么解决吗

到目前为止,我所做的是打电话

Dialog.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint) 
它有点工作,但对话框是无框架的

class Ui_MainWindow(object):

  def setupUi(self, MainWindow):
       MainWindow.setObjectName(_fromUtf8("MainWindow"))
       MainWindow.resize(800, 480)
       MainWindow.setMinimumSize(QtCore.QSize(800, 480))
       MainWindow.setMaximumSize(QtCore.QSize(800, 480))
       MainWindow.setWindowFlags(Qt.FramelessWindowHint)

class ControlMainWindow(QtGui.QMainWindow):

   def __init__(self, parent=None):
      super(ControlMainWindow, self).__init__(parent)
      self.ui = Main_Window.Ui_MainWindow()
      self.ui.setupUi(self)
上面是我的主窗口设置

下面是我的对话框设置,我从主窗口调用它来显示

class Ui_Dialog(object):

   def setupUi(self, Dialog):

    Dialog.setObjectName(_fromUtf8("Dialog"))
    Dialog.resize(492, 200)
    Dialog.setMinimumSize(QtCore.QSize(492, 200))
    Dialog.setMaximumSize(QtCore.QSize(492, 200))
    Dialog.setWindowFlags(Qt.WindowStaysOnTopHint)


class ControlMainDialog(QtGui.QDialog):

def __init__(self, parent=None):
    super(ControlMainDialog, self).__init__(parent)

    self.ui = Ui_Dialog()
    self.ui.setupUi(self)
我正在将Dialog或ControlMainDialog中的父对象设置为:

Dialog.setParent(Qt.QMainWindow) 

这不正确,有什么想法吗?

我设法解决了这个问题,实际上在这里有很好的记录[。当我想显示我的窗口时,我通过调用show()使用了无模式对话框,这允许我访问其他窗口,并使对话框落后于主窗口,这是我的问题。使用模式对话框是使用exec()显示对话框,其解释如下:

打开应用程序模式对话框时,用户必须完成与该对话框的交互并将其关闭,然后才能访问应用程序中的任何其他窗口


模式对话框需要父实例

删除
Dialog.setWindowFlags(Qt.WindowStaysOnTopHint)
(这将重置其他重要的窗口标志,例如
Qt.Dialog
标志);首先创建主窗口,然后创建主窗口实例作为父窗口的对话框

app = QtGui.QApplication(sys.argv)
mainWindow = ControlMainWindow()
mainWindow.show()
dialog = ControlMainDialog(mainWindow)
dialog.exec_()
sys.exit(app.exec_())

setParent
即使在对话框初始化后也可以使用,但它始终需要一个父窗口小部件实例。请阅读中的详细信息。

您是在对话框初始化时设置了父窗口,还是只使用了“保持在顶部”提示?还没有在对话框初始化时设置父窗口,应该类似于*dialog.setParent吗(主窗口)"?我很快就会尝试!不起作用,不确定如何设置父级,认为如果我初始化主窗口父级,它应该是正确的…可能需要找到一些关于此的文档…需要一个父级实例。我真的认为您在实现它时出了一些问题,您最好提供一个我们可以帮助您的解决方案。我的错,我已经添加了这是我的代码的一个简单示例。我希望它能让我了解我在尝试做什么。这是一个好的解决方案,如果它重置了C的其他重要标志,我将查看该文档,甚至删除setWindow标志。我不明白在“Dialog.setParent()中设置什么,它需要的小部件实例,是QMainWindow小部件还是所有QObject子体(包括所有QWidgets,因此包括所有QDialogs)的父对象始终必须是另一个QObject子体的实例。因此,如我的示例所示,在您的情况下,它必须是
mainWindow
实例,但可以是作为顶部窗口的任何其他QWidget(而不是已经是另一个窗口的子窗口的小部件);通常最好在对象构造函数中设置父对象,大多数情况下,如果以后再设置,则不会有太大变化,但通常这意味着子对象的某些属性可能会发生变化,具体取决于类。我今天将重试。昨天我尝试了“Dialog.setParent(QMainWindow)”'出现了一个错误,令人困惑。我将执行'Dialog.setParent(MainWindow'),如果我从另一个文件调用/执行Dialog,ofc先导入,也应该识别此MainWindow,对吗?我回家后会尝试,然后带着更新回来。等等。你不能只是“调用”不知从哪里来的东西。它们是存在于其作用域中的对象。这不仅仅是关于导入,还取决于程序逻辑。很抱歉问一下,但是你确定你已经理解了类和实例之间的逻辑差异吗?不,不,它不是不知从哪里来的。我正在调用具有对话框实例的类,这将执行它。我在类中执行setParent,所有配置都在其中。我只在另一个文件中执行对话框,而类和一个文件包含设置和配置。