【求助】关于Qt的QMdiArea的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【求助】关于Qt的QMdiArea的问题相关的知识,希望对你有一定的参考价值。

前段时间遇到一个问题,纠结了好久,现将问题简化如下:
界面的设置,如图:

就是一个mdiArea里面有两个子窗口,各自放了两个lineEdit,下面的按键点击时连接的槽函数如下:
void MainWindow::nextClick() ui->mdiArea->activateNextSubWindow();
实际上就是一个切换窗口的作用。

问题:
当我把两个子窗口的焦点都定位到下面那个lineEdit中时,然后使用按钮切换窗口,反复几次,发现慢慢的光标都跑到上面的lineEdit中去了。如果使用鼠标点击子窗口的形式切换窗口,则不会有这种现象。请问这是Qt的BUG吗?如果不是,应该怎么解决这个问题?

参考技术A 你试一下编辑那两个QLineEdit的Tab顺序,把下面的那个QLineEdit的Tab顺序设为1.

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

一个典型的GUI应用程序可能有多个窗口,选项卡控件和堆栈窗口控件允许一次使用其中的一个窗口。然而,很多时候这种方法不是很有用,因为其他窗口的视图是隐藏的一种同时显示多个窗口的方法是,创建多个独立的窗口,这些独立的窗口被称为SDI(Single Document Interface,单文档界面),每个窗口都可以有自己的菜单系统、工具栏等。这需要占用较多的内存资源。

MDI (Multiple Document Interface,多文档界面)应用程序占用较少的内存资源,子窗口都可以放在主窗口容器中,这个容器控件被称为QMdiArea。

QMidArea控件通常占据在QMainWindow对象的中央位置,子窗口在这个区域是QMdiSubWindow类的实例,可以设置任何QWidget作为子窗口对象的内部控件,子窗口在MDI区域进行级联排列布局。

QMdiArea类和QMdiSubWindow类中的常用方法如下表所示:

通过示例,了解QMdiArea类和QMdiSubWindow类多文档界面的使用方法,效果如下所示:

示例中,主窗口QMainWindow拥有一个菜单控件和MidArea控件。当单击菜单控件时触发triggered信号,连接到槽函数windowaction()。当选择菜单中的“New"动作时,会添加一个新的MDI,每个MDI都有标题,在主窗口内部会增加MDI的数量。当选择菜单中的“cascade"和"Tiled"动作时,会在主窗口中显示子窗口的排列方式:级联显示子窗口或平铺显示子窗口。

实现代码如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
            
class MainWindow(QMainWindow):
	count=0
	def __init__(self, parent=None):
		super(MainWindow, self).__init__(parent)
		self.mdi = QMdiArea()
		self.setCentralWidget(self.mdi)
		bar=self.menuBar()
		file=bar.addMenu("File")
		file.addAction("New")
		file.addAction("cascade")
		file.addAction("Tiled")
		file.triggered[QAction].connect(self.windowaction)
		self.setWindowTitle("MDI demo")

	def windowaction(self, q): 
		print( "triggered")
		
		if q.text()=="New":
			MainWindow.count=MainWindow.count+1
			sub=QMdiSubWindow()
			sub.setWidget(QTextEdit())
			sub.setWindowTitle("subwindow"+str(MainWindow.count))
			self.mdi.addSubWindow(sub)
			sub.show()
		if q.text()=="cascade":
			self.mdi.cascadeSubWindows()
		if q.text()=="Tiled":
			self.mdi.tileSubWindows()
             	
if __name__ == '__main__':
	app = QApplication(sys.argv)
	demo = MainWindow()
	demo.show()
	sys.exit(app.exec_())

以上是关于【求助】关于Qt的QMdiArea的问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt--QMdiArea和QMdiSubWindow的基本用法

MDI QMdiArea 多文档区域

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

qt新手求助,关于lable数组定义