`
mmdev
  • 浏览: 12926314 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

常见的QT问题

 
阅读更多

1、如果在窗体关闭前自行判断是否可关闭
答:重新实现这个窗体的closeEvent()函数,加入判断操作

Quote:

void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave())
{
writeSettings();
event->accept();
}
else
{
event->ignore();
}
}



2、如何用打开和保存文件对话
答:使用QFileDialog

Quote:

QString fileName = QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty())

{
loadFile(fileName);
}


Quote:

QString fileName = QFileDialog::getSaveFileName(this);
if (fileName.isEmpty())

{
return false;
}



3、如果创建Actions(可在菜单和工具栏里使用这些Action)
答:

Quote:

newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
newAct->setShortcut(tr("Ctrl+N"));
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));

openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
openAct->setShortcut(tr("Ctrl+O"));
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));

saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this);
saveAct->setShortcut(tr("Ctrl+S"));
saveAct->setStatusTip(tr("Save the document to disk"));
connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));

saveAsAct = new QAction(tr("Save &As..."), this);
saveAsAct->setStatusTip(tr("Save the document under a new name"));
connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));

exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcut(tr("Ctrl+Q"));
exitAct->setStatusTip(tr("Exit the application"));
connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));

cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
cutAct->setShortcut(tr("Ctrl+X"));
cutAct->setStatusTip(tr("Cut the current selection's contents to the "
"clipboard"));
connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));

copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this);
copyAct->setShortcut(tr("Ctrl+C"));
copyAct->setStatusTip(tr("Copy the current selection's contents to the "
"clipboard"));
connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));

pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this);
pasteAct->setShortcut(tr("Ctrl+V"));
pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
"selection"));
connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste()));

aboutAct = new QAction(tr("&About"), this);
aboutAct->setStatusTip(tr("Show the application's About box"));
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));

aboutQtAct = new QAction(tr("About &Qt"), this);
aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));


4、如果创建主菜单
答:采用上面的QAction的帮助,创建主菜单

Quote:

fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);
fileMenu->addAction(saveAsAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);

editMenu = menuBar()->addMenu(tr("&Edit"));
editMenu->addAction(cutAct);
editMenu->addAction(copyAct);
editMenu->addAction(pasteAct);

menuBar()->addSeparator();

helpMenu = menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(aboutAct);
helpMenu->addAction(aboutQtAct);



5、如果创建工具栏
答:采用上面的QAction的帮助,创建工具栏

Quote:

fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
fileToolBar->addAction(saveAct);

editToolBar = addToolBar(tr("Edit"));
editToolBar->addAction(cutAct);
editToolBar->addAction(copyAct);
editToolBar->addAction(pasteAct);


6、如何使用配置文件保存配置
答:使用QSettings类

Quote:

QSettings settings("Trolltech", "Application Example");
QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
QSize size = settings.value("size", QSize(400, 400)).toSize();


Quote:

QSettings settings("Trolltech", "Application Example");
settings.setValue("pos", pos());
settings.setValue("size", size());



7、如何使用警告、信息等对话框
答:使用QMessageBox类的静态方法

Quote:

int ret = QMessageBox::warning(this, tr("Application"),
tr("The document has been modified./n"
"Do you want to save your changes?"),
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No,
QMessageBox::Cancel | QMessageBox::Escape);
if (ret == QMessageBox::Yes)
return save();
else if (ret == QMessageBox::Cancel)
return false;



8、如何使通用对话框中文化
答:对话框的中文化
比如说,QColorDialog的与文字相关的部分,主要在qcolordialog.cpp文件中,我们可以从qcolordialog.cpp用 lupdate生成一个ts文件,然后用自定义这个ts文件的翻译,再用lrelease生成一个.qm文件,当然了,主程序就要改变要支持多国语言了,使用这个.qm文件就可以了。

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

Quote:

cp src/translations/qt_untranslated.ts ./qt_zh_CN.ts


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

9、在Windows下Qt里为什么没有终端输出?
答:把下面的配置项加入到.pro文件中

Quote:

win32:CONFIG += console



10、Qt 4 for X11 OpenSource版如何静态链接?
答:编译安装的时候加上-static选项

Quote:
./configure -static //一定要加static选项
gmake
gmake install


然后,在Makefile文件中加 static 选项或者在.pro文件中加上QMAKE_LFLAGS += -static,就可以连接静态库了。

11、想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办?
答:在main函数中加入下面三条语句,但并不提倡

Quote:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));


或者

Quote:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));


使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定
这样,就可在源文件中直接使用中文,比如:

Quote:
QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok, QMessageBox::NoButtons);



12、为什么将开发的使用数据库的程序发布到其它机器就连接不上数据库?
答:这是由于程序找不到数据库插件而致,可照如下解决方法:
在main函数中加入下面语句:

Quote:
QApplication::addLibraryPath(strPluginsPath");


strPluginsPath是插件所在目录,比如此目录为/myapplication/plugins
则将需要的sql驱动,比如qsqlmysql.dll, qsqlodbc.dll或对应的.so文件放到
/myapplication/plugins/sqldrivers/
目录下面就行了
这是一种解决方法,还有一种通用的解决方法,即在可执行文件目录下写qt.conf文件,把系统相关的一些目录配置写到qt.conf文件里,详细情况情参考Qt Document Reference里的qt.conf部分


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

Quote:
TEMPLATE=lib


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

Quote:
LIBS += -Lyourdlllibpath -lyourdlllibname


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

14、如何启动一个外部程序
答:可使用QProcess和QThread这两个类结合使用的方法来处理,以防止在主线程中调用而导致阻塞的情况
先从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:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/save.png</file>
</qresource>
</RCC>


然后在.pro中加入下面代码:

Quote:

RESOURCES = res.qrc



在程序中使用:

Quote:

...
:images/copy.png
...
分享到:
评论

相关推荐

    Qt常见问题汇总

    Qt常见问题汇总。。。。。。。。。。。。。。。。。。

    Windows平台QT常见问题

    Windows平台QT常见问题 1.版本的选择 2.源码编译问题 3.中文乱码问题 4.带界面的动态库问题

    Qt发布遇到的图片文字常见问题以及解决方法

    介绍了Qt发布的时候遇到常见的文字显示为乱码,或者在自己的电脑上显示为正常的,但是在别人的电脑上显示的是乱码,在自己的电脑上显示的是正常的图片,但是在别人的电脑上图片显示不出来的问题

    QT中文参考手册(QT help)

    常见问题解答 Window系统特性注释 如何购买Qt 安装 如何学习Qt 教程一, 教程二 实例 循序渐进实例 白皮书 Qt 3.0的关键特征 修改历史 从Qt 2.x移植到Qt 3.x 简体中文汉化日志 Qt季刊 API参考 ...

    Qt4编程.pdf

    4.1常见的QtIDE 4.2QtCreator 4.2.1简介 4.2.2主要特点 4.2.3安装与配置 4.3Eclipse! 4.3.1简介 4.3.2主要特点 4.3.3安装与配置 4.3.4使用要领 4.4VisualStudio2008与Qt4.5 4.5问题与解答 4.6总结与提高 第5章使用...

    QT经典中文手册.chm

    常见问题解答 Window系统特性注释 如何购买Qt 安装 如何学习Qt 教程一, 教程二 实例 循序渐进实例 白皮书 Qt 3.0的关键特征 修改历史 从Qt 2.x移植到Qt 3.x 简体中文汉化日志 Qt季刊 API参考 ...

    linux开发常见问题

    Linux+ARM开发移植常见问题解析 一、常用知识积累 二、常见操作问题 三、QT移植问题

    Qt交叉编译后aarch64-linux-gnu-成功运行在Zynq UltraScale+MPSoC上

    因为是公司项目需要,所以每一步都是亲自验证,其中还包括了Qt编译后的文件、最终的工程源码,以及解决了整个过程中很多不常见的错误,还添加了软键盘,解决了软键盘背景全黑以及软键盘没有中英文显示问题。...

    Qt4windows安装文档详解ByXZ(QT Libraries4.8.6&&QT Creator3.3.3).doc

    Qt4windows安装文档详解ByXZ(QT Libraries4.8.6&&QT Creator3.3.3).doc 本人亲自实践安装成功,百分之百没有问题,如有问题...解决了QT4安装过程中常见的大部分问题,安装完成后,可以正常代码联想,打断点,编译,运行

    Qt中文帮助手册 - Qt中文帮助文档

    qt中文帮助手册 Qt是一个多平台的C++图形用户界面应用程序框架。...其他的常见问题(FAQs)能够在 FAQ index 和 Technical FAQ中发现. 文档包括Qt教程、如何学习Qt、实例、API参考、模块等 文档非最新Qt,仅供学习入门

    精通qt4编程(源代码)

    \ 第9章 网络 李立夏介绍了Qt的网络处理,包括编写常见的FTP、HTTP、UDP和TCP程序,以及访问底层网络接口信息和扩展Qt网络模块功能的方法。 227 \ 第10章 多线程 李立夏介绍了Qt的多线程处理,包括两方面内容:传统...

    QT4.8.5移植

    QT4.8.5移植常见问题及移植注意事项

    QT移植过程全纪录

    QT移植学习过程总结,记录了移植过程以及常见问题。

    qt控制打印机调节真实页面大小及问题解决方法

    文档具体讲解了如何真正的控制打印页面的大小设置,还有就是几个常见的参数设置流程

    精通Qt4编程(第二版)源代码

    自Trolltech公司1996年推出Qt 1.0版以来,Qt已经从2.x,3.x发展到了现在的Qt 4.3,本书就是基于最新的Qt 4.3写成。因为Qt 4框架设计得非常优秀,在2006年的第16届Jolt大奖上,Qt 4获得了类库、框架和组件类别的Jolt...

    VS配置QT应用开发图文教程

    VS配置QT应用开发教程 Qt 5.6.0-VS2015 版本安装配置图文教程和一些常见问题解决 作者:Winland0704

    基于QT_C++嵌入式聊天系统设计与实现源码论文答辩ppt.zip

    基于QT_C++嵌入式聊天系统设计与实现源码论文答辩ppt.zip

    windows下qt环境的搭建

    本文介绍了在windows下搭建qt的一些常见问题,希望可以帮到大家。

    vlc常见问题汇总

    在编译VLC中遇到的问题的汇总,对不会编译VLC的朋友应该有提示性作用

    linux qt 链接 sql 2005程序完整解决方案

    linux qt 链接 sql 2005程序完整解决方案,总结李常见的问题,以及解决方案,完整的程序代码,通过测试

Global site tag (gtag.js) - Google Analytics