1、如何在窗体关闭前自行判断是否可关闭 答:重新实现这个窗体的closeEvent()函数,加入判断操作 void MainWindow::closeEvent(QCloseEvent*event) { if (maybeSave()) { writeSettings(); event->accept(); } else { event->ignore(); } } 2、如何用打开和保存文件对话 QString fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) { loadFile(fileName); } QString fileName = QFileDialog::getSaveFileName(this); if (fileName.isEmpty()) { returnfalse; } 3、如何创建Actions(可在菜单和工具栏里使用这些Action) 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); saveAct =new QAction(QIcon(":/images/save.png"), tr("&Save"),this); saveAsAct =new QAction(tr("Save &As"),this); exitAct =new QAction(tr("E&xit"),this); cutAct =new QAction(QIcon(":/images/cut.png"), tr("Cu&t"),this); copyAct =new QAction(QIcon(":/images/copy.png"), tr("&Copy"),this); pasteAct =new QAction(QIcon(":/images/paste.png"), tr("&Paste"),this); aboutAct =new QAction(tr("&About"),this); aboutQtAct =new QAction(tr("About &Qt"),this); 4、如何创建主菜单 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")); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); 5、如何创建工具栏 fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); fileToolBar->addAction(saveAct); editToolBar = addToolBar(tr("Edit")); 6、如何使用配置文件保存配置 QSettings settings("Trolltech","Application Example"); QPoint pos = settings.value("pos", QPoint(200,200)).toPoint(); QSize size = settings.value("size", QSize(400,400)).toSize(); QSettings settings("Trolltech","Application Example"); 7、如何使用警告、信息等对话框 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(); elseif (ret== QMessageBox::Cancel) returnfalse; 8、如何使通用对话框中文化 另外,还有一个更快的方法,在源代码解开后有一个目录translations,下面有一些.ts, .qm文件,我们拷贝一个: 然后,我们就用Linguist打开这个qt_zh_CN.ts,进行翻译了,翻译完成后,保存后,再用lrelease命令生成 qt_zh_CN.qm,这样,我们把它加入到我们的qt project中,那些系统的对话框,菜单等等其它的默认是英文的东西就能显示成中文了。 9、在Windows下Qt里为什么没有终端输出? win32:CONFIG += console 10、Qt 4 for X11 OpenSource版如何静态链接? ./configure -static //一定要加static选项 11、想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办? 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); 12、为什么将开发的使用数据库的程序发布到其它机器就连接不上数据库? QApplication::addLibraryPath(strPluginsPath"); strPluginsPath是插件所在目录,比如此目录为/myapplication/plugins 13、如何创建QT使用的DLL(.so)以及如何使用此DLL(.so) TEMPLATE=lib 而源文件则和使用普通的源文件一样,注意把头文件和源文件分开,因为在其它程序使用此DLL时需要此头文件 LIBS += -Lyourdlllibpath -lyourdlllibname Windows下和Linux下同样(Windows下生成的DLL文件名为yourdlllibname.dll而在Linux下生成的为libyourdlllibname.so 14、如何启动一个外部程序 class MyThread :public QThread { public: void run(); }; void MyThread::run() 这样,在使用的时候则可定义一个MyThread类型的成员变量,使用时调用其start()方法: class {.. MyThread thread; };
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。 |
http://blog.csdn.net/liuguangzhou123/article/details/7513590