QWidget::setMinimumSize: (dockWidget/QDockWidget) Negative sizes (0,-1) are not possible问题解决方法

1 问题描述

在QT项目中,使用如下代码隐藏了QDockWidget的标题栏,然后使用QDockWidget对象的setWidget函数,就提示如下警告:

  1. 隐藏标题栏代码:
QWidget* titleBar = ui->dockWidget->titleBarWidget();
QWidget* tempWidget = new QWidget();
ui->dockWidget->setTitleBarWidget(tempWidget);
delete  titleBar;
  1. 提示的错误:
QWidget::setMinimumSize: (dockWidget/QDockWidget) Negative sizes (0,-1) are not possible

2 问题分析

由于原本的标题栏存在,所以setWidget添加的窗体在标题栏的下方,当去掉标题栏后,setWidget添加的窗体覆盖了原本属于标题栏的位置,所以提示该警告。

3 解决方案

在tempWidget中添加一个控件,占住原本属于标题栏的位置,添加后的代码如下

    QWidget* titleBar = ui->dockWidget->titleBarWidget();
    QWidget* tempWidget = new QWidget();
    ui->dockWidget->setTitleBarWidget(tempWidget);
    delete  titleBar;

    // 占位,防止出现 setMinimumSize ... Negative sizes (0,-1) are not possible的错误
    QGridLayout *gridLayout = new QGridLayout(tempWidget);
    QLabel *tempLabel = new QLabel("");
    tempLabel->setMaximumHeight(1);

    gridLayout->addWidget(tempLabel);
    gridLayout->setContentsMargins(0, 0, 0, 0);

4 总结

遇到这类问题不要害怕,根据提示初步定位范围,然后可以使用最笨也是最有效的方法(屏蔽代码调试),定位到具体代码后冷静分析,遇到实在解决不了的问题时,应选择绕过它,相信你一定能解决掉所有BUG的。

如果觉得这篇文章对您有帮助,记得点个赞哟 ^ ^

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Widget类中添加一个QStringList成员变量,用于存储相册中的图片路径: ```c++ private: Ui::Widget *ui; QTimer *timer; //系统时间定时器 QTimer *timer2; //计时器 int count; //计时器计数器 QStringList photoList; //相册中的图片路径 ``` 在Widget类的构造函数中初始化photoList: ```c++ Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //显示系统时间 //实例化对象 this->timer=new QTimer(this); QString curtime=QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); //信号和槽函数关联 connect(this->timer,&QTimer::timeout,this,&Widget::update_time); //启动定时器 this->timer->start(1000); //启动计时器 this->count=0; //实例化对象 this->timer2=new QTimer(this); //信号和槽函数关联 connect(this->timer2,&QTimer::timeout,this,&Widget::update_time2); //开始计时 this->timer2->start(1000); //初始化相册图片路径 this->photoList.append(":/images/photo1.jpg"); this->photoList.append(":/images/photo2.jpg"); this->photoList.append(":/images/photo3.jpg"); this->photoList.append(":/images/photo4.jpg"); this->photoList.append(":/images/photo5.jpg"); this->photoList.append(":/images/photo6.jpg"); } ``` 在Widget类的头文件中添加一个私有函数showNextPhoto(),用于显示相册中的下一张照片: ```c++ private: void showNextPhoto(); ``` 在showNextPhoto()函数中,使用QPixmap加载相册中的下一张照片,并显示在QLabel控件中: ```c++ void Widget::showNextPhoto() { static int index = 0; if (index >= this->photoList.size()) { index = 0; } QPixmap pixmap(this->photoList.at(index)); this->ui->photo_label->setPixmap(pixmap.scaled(this->ui->photo_label->size(), Qt::KeepAspectRatio)); index++; } ``` 在Widget类的头文件中添加一个私有槽函数on_show_btn_clicked(),用于处理“显示”按钮的点击事件。在该槽函数中调用showNextPhoto()函数显示相册中的下一张照片: ```c++ private slots: void on_show_btn_clicked(); ``` 在Widget类的源文件中实现on_show_btn_clicked()槽函数: ```c++ void Widget::on_show_btn_clicked() { this->showNextPhoto(); } ``` 最后,在widget.ui文件中添加一个QLabel控件用于显示相册中的照片,并添加一个QPushButton控件用于触发显示操作。将QPushButton控件的clicked()信号与Widget类的on_show_btn_clicked()槽函数关联,即可实现电子相册的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值