微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > QT 技术应用常用问题解答

QT 技术应用常用问题解答

时间:09-12 来源:互联网 点击:

结合使用的方法来处理,以防止在主线程中调用而导致阻塞的情况

先从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 读取注册表得到 串口信息的方法!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top