Qt自定义控件走过的坑

1.本想着当一个控件resizeEvent触发时将控件里的一切坐标都设置好,后来发现是我太天真了。事实就是第一次resizeEvent触发根本获取不到子控件的任何参数(坐标和大小),目前像这种自定义控件最好在showEvent中将一切设置好。

   今天showevent中QTableWidget大小获取错误不知道为什么

2.写圆形的这种控件要求直径必须是个圆 这就要求长和宽要是偶数 且两个都取最小的那个数值

 

3.这个是c++问题 考虑编译的问题 不要在还没有声明 类的情况下 就调用 同一个文件中 类的声明顺序要注意

 

4.为了重写qpaintevent我写了一个类继承自QLabel 但是显示不出来 发现调用它的构造函数时 未正确传值给父类

然后就造成了基类调用QLabel的默认构造且父窗口是null 但是子类父窗口却使用了自己设置的窗口,造成了矛盾

但是我猜测内部还是以父类里的参数作为父窗口的

 

5 2019.7.5:自己写了个类继承了QLabel重写了其中的QPainterEvent 然后setText(xx)死活显示不出来了

思考了一下结论:QLabel的SetText本身就是通过他自身的QPainterEvent实现了 重写了这个所以没有了这个功能。

 

6 2019 7.11  qpainter not active Painter无效 图画不出来 检查了一下 之前QPainter painter(this); 没有参数 日了狗

7QWidget设置为模态窗口 网上人讲的都不到位,多一句,少一句的,在widget构造函数里加

    //模态
    setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
    setWindowModality(Qt::WindowModal);
即可 重点是上面那句

8 2019.9.6  设置矩形参数 先设置点再设置长和宽 不然不正确

    QRect rect;
    rect.setX(10);
    rect.setY(10);
    rect.setWidth(150);
    rect.setHeight(150);

9.QDialog或者继承自QDialog的窗口设置父类就不模态了

10.2020.3.25 仔细考虑过为了灵活运动 依然需要将该设置的参数全部设固定值再update 而不是一味的将接口做简单全部通过程序内部判断

11.有的时候我们需要不让控件发出信号,我们可以用如下函数:

		//这里不要让其发出textchange信号
		ui->edit_average_pre->blockSignals(true);
		ui->edit_average_pre->setText(QString::number(value));
		ui->edit_average_pre->blockSignals(false);

12.为了适应高dpi 首先需要使用QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);   其次图片全部用SVG格式,最后如果出现图片不符合需要自己再用函数painter处理下

class CCustomIconEngine : public QIconEngine
{
	QSvgRenderer* svgRender;
	QPixmap iconPix;
public:
	explicit CCustomIconEngine(QString svgPath, QSize sz) {
		svgRender = new QSvgRenderer(svgPath);
	}

	~CCustomIconEngine() {
		delete svgRender;
	}

	void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) 
	{
		QSize pixmapSize = rect.size();
		int imgWidth = rect.width() / g_fGlobalDPI;
		int imgHeight = rect.height() / g_fGlobalDPI;
		QImage image(imgWidth, imgHeight, QImage::Format_ARGB32);
		QPainter _painter(&image);
		image.fill(BFGetIconBackColor());
		svgRender->render(&_painter);
		iconPix = QPixmap::fromImage(image);
		painter->setBrush(BFGetIconBackColor());
		QRect rcPixmap = rect.adjusted(-1, -1, 0, 0);
		painter->drawRect(rcPixmap);
		//painter->setPen(QColor("#1B90FB"));
		//painter->drawLine(rect.bottomLeft(), rect.bottomRight());
		painter->drawPixmap(QRect((rcPixmap.width() - imgWidth) / 2, (rcPixmap.height() - imgHeight) / 2, imgWidth, imgHeight), iconPix);
	}
	QIconEngine *clone() const {
		return new CCustomIconEngine(*this);
	}
};

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt自定义控件大全Designer源码是一个包含了多种自定义控件的全套源码,它主要用于在Qt设计师中使用。Qt是一个跨平台的C++应用程序开发框架,提供了丰富的图形界面控件,但有时候我们可能需要自定义一些特殊的控件来满足我们的需求。 Qt自定义控件大全Designer源码包含了很多常用的自定义控件,如自定义按钮、进度条、滑块、验证码输入框等等。这些控件的设计和实现已经封装好,我们只需要将源码添加到我们的项目中,然后在Qt设计师中直接使用即可。 使用Qt自定义控件大全Designer源码有以下几个优点: 1.提供了丰富的自定义控件选择:Qt自定义控件大全Designer源码包含了多样化的控件,可以满足不同项目的需求。无论是一些简单的控件,还是一些复杂的控件,我们都可以找到合适的选择。 2.减少开发时间和工作量:使用源码中的自定义控件可以减少我们从头开始设计和实现的工作,节省了大量的开发时间和工作量。我们只需要将源码添加到项目中并正确配置,就可以直接在设计师中使用这些自定义控件。 3.提高应用程序的美观性和用户体验:Qt自定义控件大全Designer源码中的控件经过精心设计和实现,具有良好的界面效果和用户交互体验。使用这些自定义控件可以为我们的应用程序提供更加美观和友好的界面。 总之,Qt自定义控件大全Designer源码是一个提供了多种自定义控件的全套源码,使用它可以快速、方便地实现各种自定义控件,提高应用程序的开发效率和用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值