释放setCentralWidget
时间: 2024-05-22 18:16:45 浏览: 6
setCentralWidget()是QMainWindow类的一个函数,用于设置主窗口的中央部件(central widget)。如果之前已经设置了中央部件,调用该函数会释放这个中央部件的内存空间。
释放中央部件的内存空间可以通过以下代码实现:
QWidget *previousCentralWidget = QMainWindow::centralWidget();
if (previousCentralWidget)
{
QMainWindow::setCentralWidget(nullptr);
delete previousCentralWidget;
}
这里首先获取之前的中央部件,然后将中央部件设置为nullptr,最后删除之前的中央部件对象。这样就可以释放中央部件的内存空间了。
相关问题
MainWindow::MainWindow(QString ac,int r,QSqlDatabase* db,QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->setCentralWidget(ui->stackedWidget); m_account = ac; m_role = r; m_db = *db; iniUI(); } MainWindow::~MainWindow() { delete ui; }
这是一个 C++ 的 Qt 项目中的 MainWindow 类的构造函数和析构函数。在构造函数中,传入了四个参数,分别是一个 QString 类型的变量 ac,一个 int 类型的变量 r,一个 QSqlDatabase 指针类型的变量 db,以及一个 QWidget 指针类型的 parent 变量。在函数体内,首先调用了 Ui::MainWindow 类的 setupUi() 函数,将主窗口的 UI 界面装载进来,然后将 UI 界面设置为主窗口的中心窗口。接着将传入的 ac、r、db 分别赋值给对象的成员变量 m_account、m_role、m_db。最后调用了 iniUI() 函数,用于初始化主窗口的其他相关操作。在析构函数中,调用了 delete ui,释放了 ui 指针所指向的内存空间。
生成一个pyqt5的label类,这个类可以通过鼠标左键的点击事件和释放事件画框,并保存画出框的中心店的坐标和长宽
好的,以下是生成pyqt5的label类,并且可以通过鼠标左键的点击事件和释放事件画框,并保存画出框的中心店的坐标和长宽的代码:
```python
from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
class CustomLabel(QLabel):
def __init__(self):
super().__init__()
self.setMouseTracking(True) # 开启鼠标追踪,将鼠标移动事件也加入事件处理
self.is_down = False # 记录鼠标是否按下
self.start_pos = QPoint() # 记录鼠标按下的位置
self.end_pos = QPoint() # 记录鼠标释放的位置
self.center_point = QPoint() # 记录框的中心点坐标
self.width = 0 # 记录框的宽度
self.height = 0 # 记录框的高度
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton: # 如果鼠标左键按下
self.is_down = True # 标记鼠标已经按下
self.start_pos = event.pos() # 记录鼠标按下的位置
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton: # 如果鼠标左键释放
self.is_down = False # 标记鼠标已经释放
self.end_pos = event.pos() # 记录鼠标释放的位置
# 计算框的中心点坐标、宽度、高度
x1, y1 = self.start_pos.x(), self.start_pos.y()
x2, y2 = self.end_pos.x(), self.end_pos.y()
self.center_point = QPoint((x1 + x2) // 2, (y1 + y2) // 2)
self.width = abs(x2 - x1)
self.height = abs(y2 - y1)
self.update() # 更新widget的绘图
def mouseMoveEvent(self, event):
if self.is_down: # 如果鼠标已经按下
self.end_pos = event.pos() # 记录鼠标的位置
self.update() # 更新widget的绘图
def paintEvent(self, event):
super().paintEvent(event)
if self.is_down: # 如果鼠标已经按下
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
painter.drawRect(self.start_pos.x(), self.start_pos.y(), # 绘制矩形框
self.end_pos.x() - self.start_pos.x(),
self.end_pos.y() - self.start_pos.y())
```
您可以在需要使用这个类的PyQt5界面中,实例化一个CustomLabel对象,并将它添加到界面中:
```python
from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
central_widget = QWidget()
layout = QVBoxLayout()
label = CustomLabel() # 实例化CustomLabel对象
layout.addWidget(label)
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
```
这样,您就可以在界面中使用CustomLabel对象,并通过鼠标左键的点击和释放事件实现绘制矩形框,并保存框的中心点坐标和长宽。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)