首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt4 WindowsStayOnTop on LXSession

Qt4 WindowsStayOnTop on LXSession
EN

Stack Overflow用户
提问于 2019-09-22 17:43:42
回答 2查看 123关注 0票数 0

我正在raspberry pi上运行一个应用程序,它使用qt4。我的应用程序有不同的窗口、主窗口和对话。当我在raspberry pi桌面上运行我的应用程序时,它工作得很好,如果我单击主窗口,对话框不会在主窗口后面结束。

Qt.WindowStaysOnTopHint工作得很好。Qt.WindowStaysOnTopHint确保窗口位于主窗口的顶部,并且不会导致无法访问它。

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

Qt.WindowStaysOnTopHint

工具不工作..。

知道怎么解决吗?

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

代码语言:javascript
复制
Dialog.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint) 

它有点工作,但对话是没有框架的。

代码语言:javascript
复制
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)

以上是我的主窗口设置。

下面是我的对话框设置,我从MainWindow调用它来显示。

代码语言:javascript
复制
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中的父级设置为:

代码语言:javascript
复制
Dialog.setParent(Qt.QMainWindow) 

不对,知道吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-24 17:32:43

我设法解决了这个问题,实际上在这里已经有了很好的文档,[https://doc.qt.io/qt-5/qdialog.html#modal-dialogs]。当我想要显示我的窗口时,我使用的是非模式对话框调用show(),这允许我访问其他窗口并使对话框落在主窗口后面,这是我的问题。使用Modal对话框显示使用exec()的对话框,解释如下:

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

票数 0
EN

Stack Overflow用户

发布于 2019-09-24 17:37:37

模态对话框需要父实例。

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

代码语言:javascript
复制
app = QtGui.QApplication(sys.argv)
mainWindow = ControlMainWindow()
mainWindow.show()
dialog = ControlMainDialog(mainWindow)
dialog.exec_()
sys.exit(app.exec_())

即使在对话框未初始化之后也可以使用setParent,但是它总是需要一个父部件实例。阅读QDialog文档中的更多内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58051843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档