QT的一些注意点与方法积累

本文介绍了使用Qt进行界面定制的多种方法,包括禁用右键菜单、设置窗口透明度及滚动条隐藏等技巧,并详细讲解了如何通过QPropertyAnimation实现平滑过渡的动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 设置右击屏蔽事件的方法

<span style="font-size:18px;">//设置单个控件右击屏蔽
DuiTextEdit* textEdit = findChild<DuiTextEdit*>("appealExplanation");
if(textEdit)
{
	textEdit->setDefaultContextMenuEnable(false);
}
//设置全部右击屏蔽
this->setContextMenuPolicy(Qt::NoContextMenu);//设置linedit右键不响应</span>

2、 不同类之间的国际化文件<context>的类不一样

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0">
        <!--xml布局文件context直接使用QObject-->
	<context>
	    <name>QObject</name>
        <message>
            <source>Animation</source>
            <translation>动画</translation>
        </message>
    </context>
    <!--在类DemoFrame类中context使用DemoFrame-->
    <context>
	<name>DemoFrame</name>
   	<message>
            <source>Document</source>
            <translation>文件</translation>
        </message>
    </context>
</TS>

3、 ImageWidget图片的大小等于设定的大小时,当要设定边框时,需要将设定的大小增大2个像素才能显示边框


4、 窗口设定的属性

//设置透明背景和无边框
setStyleSheet("background: transparent;border:0px");
//隐藏滚动条
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//设置透明2-窗体标题栏不透明,背景透明
setAttribute( Qt::WA_TranslucentBackground, true );
//去掉标题栏 
setWindowFlags( Qt::FramelessWindowHint|Qt::Tool );

5、 设置ImageWidget的窗口可见,大于窗口的不可见

//setFlag( QGraphicsItem::ItemClipsToShape );
//例如设置一个数字长条0-9的数字图片,只显示其中一个数字的部分部分可见
setFlag( QGraphicsItem::ItemClipsChildrenToShape );

6、 设置动画的一些属性

//QPropertyAnimation构造函数中第二个参数设置的固定值如“windowOpacity” ,"pos","geometry"
//m_animation = new QPropertyAnimation( m_valueImageWidget,"pos" );
m_animation.setTargetObject( m_valueImageWidget );
m_animation.setPropertyName( "pos" );
//QEasingCurve::InOutQuart加速至一半,然后再减速。
m_animation.setEasingCurve(QEasingCurve::InOutQuart);
//该函数控制了动画的重复次数。默认是1,如果设置成0则表示无限循环。
//m_animation.setLoopCount(1); 

7、在一个frame里边嵌入一个widget,可以覆盖虚函数void DemoWidget::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /* = 0 */ )

void DemoWidget::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /* = 0 */ )
{
	painter->save();

	painter->fillRect( rect(), QColor( 0,0,0,100 ) );
	painter->setPen( Qt::red );
	painter->drawText( QRect( 0, 0, width(), height() ), "" );
	painter->drawPixmap(1,-13,269,100,pixmap);//第一,二个参数是左上角坐标,后边2个参数是长和宽
	painter->restore();
}

8、 最大化窗口后背景图不走样的方法是覆盖虚函数 virtual void drawBackground( QPainter * painter, const QRectF & rect );

//重写函数,使得背景图片最大化位置不会发生变化跟着界面最大化
virtual void drawBackground( QPainter * painter, const QRectF & rect );
void DemoFrame::drawBackground(QPainter * painter, const QRectF & rect)
{
	Q_UNUSED(rect);

	painter->save();

	qreal winWidth = this->rect().width();
	qreal winHeight = this->rect().height();
	//qreal a=pixmap_test.rect().width();
	qreal left = m_pixmapBbackground.rect().width() / 2 - winWidth/ 2;
	qreal top = 0.0;
	//将QRectF(left, top, winWidth, winHeight)大小的pixmap_test图片,绘制到this->rect()中去。
	//这里在没有最大化前left,top这个位置截取了一部分到窗口,最大化后也跟着变化
	painter->drawPixmap(this->rect(), m_pixmapBbackground, QRectF(left, top, winWidth, winHeight));
	painter->restore();
}
            布局文件中可以使用<DuiSpacerItem/>来占据空间,这个控件可以自动占据空间变大变小。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值