Chinaunix首页 | 论坛 | 博客
  • 博客访问: 414491
  • 博文数量: 168
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 13:46
文章分类

全部博文(168)

文章存档

2015年(51)

2014年(30)

2013年(87)

我的朋友

分类: C/C++

2015-04-09 14:49:47

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、资源文件的生成
   通常用rcc -o output.rcc input.qrc生成的是cpp文件,该文件通过编译可以整合到应用程序中。
   但我们更多的时候并不希望资源资源文件被直接打包进入到系统中,所以应用下面的方式生成资源文件。
   rcc -binary -output.rcc input.qrc
 
   用下面的脚本可以生成qrc文件
   find $base_dir -name *.*g | awk 'BEGIN { print "\n\t" } { print "\t\t"$1""} END{ print "\t\n"}' > $qrc_file
 
4.自定义右键菜单
      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()方法显示)。
5.如何使通用对话框中文化
答:对话框的中文化
比如说,QColorDialog的与文字相关的部分,主要在qcolordialog.cpp文件中,我们可以从qcolordialog.cpp用 lupdate生成一个ts文件,然后用自定义这个ts文件的翻译,再用lrelease生成一个.qm文件,当然了,主程序就要改变要支持多国语言了,使用这个.qm文件就可以了。

另外,还有一个更快的方法,在源代码解开后有一个目录translations,下面有一些.ts, .qm文件,我们拷贝一个:
cp src/translations/qt_untranslated.ts ./qt_zh_CN.ts


然后,我们就用Linguist打开这个qt_zh_CN.ts,进行翻译了,翻译完成后,保存后,再用lrelease命令生成qt_zh_CN.qm,这样,我们把它加入到我们的qt project中,那些系统的对话框,菜单等等其它的默认是英文的东西就能显示成中文了。

6.想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办?
答:在main函数中加入下面三条语句,但并不提倡
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

或者
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定
这样,就可在源文件中直接使用中文,比如:
QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok, QMessageBox::NoButtons);

7.如何创建QT使用的DLL(.so)以及如何使用此DLL(.so)
答:创建DLL时其工程使用lib模板
TEMPLATE=lib

而源文件则和使用普通的源文件一样,注意把头文件和源文件分开,因为在其它程序使用此DLL时需要此头文件
在使用此DLL时,则在此工程源文件中引入DLL头文件,并在.pro文件中加入下面配置项:
Quote:LIBS += -Lyourdlllibpath -lyourdlllibname

Windows下和Linux下同样(Windows下生成的DLL文件名为yourdlllibname.dll而在Linux下生成的为libyourdlllibname.so

8.如何打印报表
答:Qt目前对报表打印支持的库还很少,不过有种变通的方法,就是使用 XML+XSLT+XSL-FO来进行报表设计,XML输出数据,用XSLT将XML数据转换为XSL-FO格式的报表,由于现在的浏览器不直接支持 XSL-FO格式的显示,所以暂时可用工具(Apache FOP, Java做的)将XSL-FO转换为PDF文档来进行打印,转换和打印由FOP来做,生成XSL-FO格式的报表可以由Qt来生成,也可以由其它内容转换过来,比如有工具(html2fo)将HTML转换为XSL-FO。

9.如何在系统托盘区显示图标
答:在4.2及其以上版本中使用QSystemTrayIcon类来实现

阅读(1788) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~