Qt将控件提升为自定义类以后,不能改变属性的问题解决方法。

7 篇文章 0 订阅
3 篇文章 0 订阅

环境:Win10 + Visual Studio 2019 + Qt 5.14.0

       最近做Qt开发,为了要实现QWidget的鼠标点击事件,写了继承自QWidget的自定义类MyWidget,然后在Qt Designer界面将QWidget提升为MyWidget。但是运行时候出现了问题:
       就是我提升为MyWidget的那个QWidget控件的提升之前设置的QWidget的灰色边框消失了(但是鼠标点击事件正常),没有提升为MyWidget的QWidget控件没事。然后采取了以下措施:

  1. 在MyWidget类的构造函数里设置边框:(失败)
     
    MyWidget::MyWidget(QWidget *parent)
    	: QWidget(parent)
    {
    	this->setStyleSheet("border:1px solid rgb(200, 200, 200);");
    }
  2. 在MainWindow里两种方法设置边框属性。(失败)
     
    ui.QWidgetPreview->setStyleSheet("MyWidget{border:1px solid rgb(200, 200, 200);}");
     
    myQWidget = new MyWidget(this);
    myQWidget->setStyleSheet("MyWidget{border:1px solid rgb(200, 200, 200);}");
    网上也没有相关的问题,所以也找不到解决方法,最后迫于无奈,随手改了就成功了,原来问题出在这里:

       将自定义类中的 O_OBJECT 删掉就好了!!!怪我自己创建Qt类的时候将 Insert Q_OBJECT macro 勾选上了。

 


后续更新

       虽然这样就能解决属性的问题,但是会出现一个新的问题,就是没法在 mainwindow.cpp 中绑定信号槽了。详情如下:

mywidget.h

#pragma once

#include <QWidget>
#include <QMouseEvent>

class MyWidget : public QWidget
{
	//Q_OBJECT

public:
	MyWidget(QWidget *parent);
	~MyWidget();

protected:
	virtual void mousePressEvent(QMouseEvent* event);

signals:
	void clicked();
};

mywidget.cpp

#include "mywidget.h"
#include <qDebug>

MyWidget::MyWidget(QWidget *parent)
	: QWidget(parent)
{
	//this->setStyleSheet("border:1px solid rgb(200, 200, 200);");
}

MyWidget::~MyWidget()
{
}

void MyWidget::mousePressEvent(QMouseEvent* event)
{
	if (event->button() == Qt::LeftButton)
	{
		emit clicked();
	}

	QWidget::mousePressEvent(event);
	//qDebug() << this->objectName();
}

mainwindow.cpp

connect(ui.QWidgetPreview41, SIGNAL(clicked()), this, SLOT(widgetPressed()));

这样编译就会报错:

此时把 Q_OBJECT 的注释去掉加上去就不会报错了。

但是这样就跟前面的问题有冲突了T.T。哭了,后续持续更新。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值