QT 技术应用常用问题解答
结合使用的方法来处理,以防止在主线程中调用而导致阻塞的情况
先从QThread继承一个类,重新实现run()函数:
Quote:
class MyThread : public QThread
{
public:
void run();
};
void MyThread::run()
{
QProcess::execute(notepad.exe);
}
这样,在使用的时候则可定义一个MyThread类型的成员变量,使用时调用其start()方法:
Quote:
class ...............
{...........
MyThread thread;
............
};
.....................
thread.start();
15、如何打印报表
答: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。
16、如何在系统托盘区显示图标
答:在4.2及其以上版本中使用QSystemTrayIcon类来实现
17、怎样将日志输出到文件中
答:(myer提供)
Quote:
void myMessageOutput( QtMsgType type, const char *msg )
{
switch ( type ) {
case QtDebugMsg:
//写入文件;
break;
case QtWarningMsg:
break;
case QtFatalMsg:
abort();
}
}
int main( int argc, char** argv )
{
QApplication app( argc, argv );
qInstallMsgHandler( myMessageOutput );
......
return app.exec();
}
qDebug(), qWarning(), qFatal()分别对应以上三种type。
18、如何将图像编译到可执行程序中去
答:使用.qrc文件
写.qrc文件,例如:
res.qrc
Quote:
images/copy.png
images/cut.png
images/new.png
images/open.png
images/paste.png
images/save.png
然后在.pro中加入下面代码:
Quote:
RESOURCES = res.qrc
在程序中使用:
Quote:
...
:images/copy.png
...
19、如何制作不规则形状的窗体或部件
答:请参考下面的帖子
http://www.qtcn.org/bbs/read.php?tid=8681
20、删除数据库时出现QSqlDatabasePrivate::removeDatabase: connection 'xxxx' is still in use, all queries will cease to work该如何处理
答:出现此种错误是因为使用了连接名字为xxxx的变量作用域没有结束,解决方法是在所有使用了xxxx连接的数据库组件变量的作用域都结束后再使用QSqlDatabase::removeDatabae(xxxx)来删除连接。
21、如何显示一个图片并使其随窗体同步缩放
答:下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下面的代码中可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。
头文件: ImageWidget.hpp
Quote:
#ifndef IMAGEWIDGET_HPP
#define IMAGEWIDGET_HPP
#include
#include
class ImageWidget : public QWidget
{
Q_OBJECT
public:
ImageWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
virtual ~ImageWidget();
protected:
void resizeEvent(QResizeEvent *event);
private:
QImage _image;
};
#endif
CPP文件: ImageWidget.cpp
Quote:
#include ImageWidget.hpp
ImageWidget::ImageWidget(QWidget *parent, Qt::WindowFlags f)
: QWidget(parent, f)
{
_image.load(image/image_background);
setAutoFillBackground(true); // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window,
QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
setPalette(pal);
}
ImageWidget::~ImageWidget()
{
}
// 随着窗体变化而设置背景
void ImageWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
QPalette pal(palette());
pal.setBrush(QPalette::Window,
QBrush(_image.scaled(event->size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
setPalette(pal);
}
22、Windows下如何读串口信息
答:可通过注册表来读qt4.1.0 读取注册表得到 串口信息的方法!
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
