我正在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)以上是我的主窗口设置。
下面是我的对话框设置,我从MainWindow调用它来显示。
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) 不对,知道吗?
发布于 2019-09-24 17:32:43
我设法解决了这个问题,实际上在这里已经有了很好的文档,[https://doc.qt.io/qt-5/qdialog.html#modal-dialogs]。当我想要显示我的窗口时,我使用的是非模式对话框调用show(),这允许我访问其他窗口并使对话框落在主窗口后面,这是我的问题。使用Modal对话框显示使用exec()的对话框,解释如下:
打开应用程序模式对话框时,用户必须完成与对话框的交互,然后才能访问应用程序中的任何其他窗口。
发布于 2019-09-24 17:37:37
模态对话框需要父实例。
删除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,但是它总是需要一个父部件实例。阅读QDialog文档中的更多内容。
https://stackoverflow.com/questions/58051843
复制相似问题