关于 QMainwindow设置布局layout失败 的解决方法

45 篇文章 13 订阅

错误

   QWidget::setLayout: Attempting to set QLayout "" on PreviewWindow "", which already has a layout

错误原因

   QMainWindow本身有布局

错误解决方法

   QMainWindow布局已经有,应该是工具栏,菜单栏,中心窗口等等,我们实际想添加控件其实是想添加进中心窗口,修改代码如下:

PreviewWindow::PreviewWindow(QWidget *parent) :
    QMainWindow(parent)
{
    _pTextBrowser = new QTextBrowser(this);
    QWidget *pWidget = new QWidget(this);
    QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
    pLayout->addWidget(_pTextBrowser);
    pWidget->setLayout(pLayout);
    setCentralWidget(pWidget);
    setWindowTitle(tr("帮助"));
    setGeometry(QRect(200, 200, 800 ,800));
}


要使用Qt创建一个包含上述要求的图形用户界面(GUI),你需要安装PyQt5库(如果尚未安装)并熟悉其基础知识。以下是一段基础的Python代码示例,用于创建这个简单的GUI: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QHBoxLayout from PyQt5.QtGui import QPixmap from cv2 import imread class ImageRecognitionApp(QMainWindow): def __init__(self): super().__init__() # 设置窗口标题 self.setWindowTitle("Image Recognition App") # 创建顶部布局 top_layout = QHBoxLayout() open_button = QPushButton("打开图片") open_button.clicked.connect(self.open_image) top_layout.addWidget(open_button) # 创建底部布局用于显示图片 image_label = QLabel() self.setCentralWidget(image_label) # 将图像标签设置为主窗口的内容 # 创建右侧布局用于显示尺寸信息 right_layout = QVBoxLayout() self.image_info_label = QLabel("尺寸信息: 长x宽x高") right_layout.addWidget(self.image_info_label) # 组合所有布局 main_layout = QVBoxLayout() main_layout.addLayout(top_layout) main_layout.addWidget(image_label) main_layout.addLayout(right_layout) self.setLayout(main_layout) def open_image(self): file_path, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "*.jpg;;*.png") # 弹出文件对话框选择图片 if file_path: try: img = imread(file_path) pixmap = QPixmap.fromImage(img) self.image_label.setPixmap(pixmap) width, height = img.shape[1::-1] # OpenCV中的尺寸是以高度x宽度的顺序,所以反转索引获取宽度和高度 self.update_image_info(width, height) except Exception as e: print(f"读取图片失败: {str(e)}") def update_image_info(self, width, height): self.image_info_label.setText(f"尺寸信息: {width}x{height}") if __name__ == "__main__": app = QApplication(sys.argv) window = ImageRecognitionApp() window.show() sys.exit(app.exec_()) ``` 这段代码首先导入必要的模块,然后定义了一个继承自`QMainWindow`的`ImageRecognitionApp`类。在这个类中,我们设置了窗口的基本结构,包括头部的按钮,中部的图片显示区,以及右侧的信息显示区域。当点击“打开图片”按钮时,会弹出文件对话框让用户选择图片,然后使用OpenCV加载图片并显示在图片区域。同时,还会更新右侧的尺寸信息。 请注意,为了运行此代码,确保已经安装了PyQt5和OpenCV库。如果没有安装,可以通过pip进行安装: ```bash pip install pyqt5 opencv-python ``` 现在你可以运行这段代码,查看创建的GUI效果。如果你遇到任何问题,可以告诉我具体的问题点,我会继续帮助你。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值