1、如何在一个widget上面用图片作背景?
首先用图片产生一个QPixmap对象,然后用QPixmap初始化一个QBrush,然后再用QBrush初始化QPalette,这样就可以用QPixmap进行背景绘制了,但是,你仍然会碰到图片不能显示的问题。那是因为QT需要根据不同的系统,用不同的方式绘制图片,所以你需要指定QStyle为某种方式,比如QMotifyStyle或者QWindowsStyle。
2、如何制作不规则的按钮?
1)用下面的方式设置不规则按钮的事件响应区域
pushButton.setMask( QPixmap(press_img_name).mask() )
2)用下面的方式设置不规则按钮的风格为背景图,以及无边框.
setStyleSheet( QString("QPushButton:pressed { background-image:url(").append(press_img_name).append("); border-style: flat; }"
" QPushButton:!pressed { background-image:url(").append(release_img_name).append("); border-style: flat; }") );
3、如何直接转出汉字
在主函数中执行下面的方法,设置文字编码为UTF-8
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
然后将要输出的utf8字串用tr()打包。
4、如何通过右上方的座标放置widget
暂时,可以计算出矩形的大小,然后得到右上角座标
5、使用定时器实时更新内容,最简单的并行,轮询方式
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
6、资源文件的生成
通常用rcc -o output.rcc input.qrc生成的是cpp文件,该文件通过编译可以整合到应用程序中。
但我们更多的时候并不希望资源资源文件被直接打包进入到系统中,所以应用下面的方式生成资源文件。
rcc -binary -output.rcc input.qrc
用下面的脚本可以生成qrc文件
find $base_dir -name *.*g | awk 'BEGIN { print"<RCC>/n/t<qresource prefix=/"//" >" } { print"/t/t<file>"$1"</file>"} END{ print"/t</qresource>/n</RCC>"}' > $qrc_file
7、自定义右键菜单
Qt中的部件的弹出菜单(ContextMenu),依据ContextMenuPolicy的值的不同,有四种形式:
一、默认菜单
此时,ContextMenuPolicy的值为Qt::DefaultContextMenu,这是默认值,其将显示部件定义的默认菜单
二、无菜单
此时,ContextMenuPolicy的值为Qt::NoContextMenu
三、由Action定义菜单
此时,ContextMenuPolicy的值为Qt::ActionsContextMenu,要为此部件定义这种菜单,很简单,只要把已经定义好的Action部件插入到要显示 此菜单的部件中,部件将自动按顺序显示菜单。
QWidget::addAction(QAction *action);
四、自定义菜单
此时,ContextMenuPolicy的值为Qt::CustomContextMenu,这回,有两种方式来定义菜单,一种是响应
customContextMenuRequested()这个signal,在响应的槽中显示菜单(QMenu的exec()方法)。第二种是需要从这个部件的类中派生一个类,重 写contextMenuEvent()这个函数显示菜单(QMenu的exec()方法显示)。
8、处理QLabel的点击事件
将QLabel的parent指定为可以处理clicked()事件的组件,比如QPushButton,然后在QPushButton中就可以捕获到该事件,并处理。
9、在QT组件中加入自定义的数据
setData()以及setProperty()是最方便的方式。