您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > qt+creator系列教程(上)
一、QtCreator的安装和helloworld程序的编写(原创)1.首先到Qt的官方网站上下载QtCreator,这里我们下载windows版的。下载地址:如下图我们下载:DownloadQtSDKforWindows*(178Mb)下载完成后,直接安装即可,安装过程中按默认设置即可。2.运行QtCreator,首先弹出的是欢迎界面,这里可以打开其自带的各种演示程序。3.我们用File-New菜单来新建工程。4.这里我们选择Qt4GuiApplication。5.下面输入工程名和要保存到的文件夹路径。我们这里的工程名为helloworld。6.这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以直接点击Next。7.我们将baseclass选为QDialog对话框类。然后点击Next。8.点击Finish,完成工程的建立。9.我们可以看见工程中的所有文件都出现在列表中了。我们可以直接按下下面的绿色的run按钮或者按下Ctrl+R快捷键运行程序。10.程序运行会出现空白的对话框,如下图。11.我们双击文件列表的dialog.ui文件,便出现了下面所示的图形界面编辑界面。12.我们在右边的器件栏里找到Label标签器件13.按着鼠标左键将其拖到设计窗口上,如下图。14.我们双击它,并将其内容改为helloworld。15.我们在右下角的属性栏里将字体大小由9改为15。16.我们拖动标签一角的蓝点,将全部文字显示出来。17.再次按下运行按钮,便会出现helloworld。到这里helloworld程序便完成了。QtCreator编译的程序,在其工程文件夹下会有一个debug文件夹,其中有程序的.exe可执行文件。但QtCreator默认是用动态链接的,就是可执行程序在运行时需要相应的.dll文件。我们点击生成的.exe文件,首先可能显示“没有找到mingwm10.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”表示缺少mingwm10.dll文件。解决这个问题我们可以将相应的.dll文件放到系统中。在QtCreator的安装目录的qt文件下的bin文件夹下(我安装在了D盘,所以路径是D:\Qt\2009.04\qt\bin),可以找到所有的相关.dll文件。在这里找到mingwm10.dll文件,将其复制到C:\WINDOWS\system文件夹下,即可。下面再提示缺少什么dll文件,都像这样解决就可以了。二、QtCreator编写多窗口程序(原创)实现功能:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。实现原理:程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。实现过程:1.首先新建Qt4GuiApplication工程,工程名为nGui,Baseclass选为QWidget。建立好后工程文件列表如下图。2.新建对话框类,如下图,在新建中,选择QtDesignerFormClass。3.选择DialogwithoutButtons。4.类名设为myDlg。5.点击Finish完成。注意这里已经默认将其加入到了我们刚建的工程中了。6.如下图,在mydlg.ui中拖入一个PushButton,将其上的文本改为“进入主窗口”,在其属性窗口中将其objectName改为enterBtn,在下面的Signalsandslotseditor中进行信号和槽的关联,其中,Sender设为enterBtn,Signal设为clicked(),Receive设为myDlg,Slot设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。下面我们将利用这个信号。7.修改主函数main.cpp,如下:#includeQtGui/QApplication#includewidget.h#includemydlg.h//加入头文件intmain(intargc,char*argv[]){QApplicationa(argc,argv);Widgetw;myDlgmy1;//建立自己新建的类的对象my1if(my1.exec()==QDialog::Accepted)//利用Accepted信号判断enterBtn是否被按下{w.show();//如果被按下,显示主窗口returna.exec();//程序一直执行,直到主窗口关闭}elsereturn0;//如果没被按下,则不会进入主窗口,整个程序结束运行}主函数必须这么写,才能完成所要的功能。如果主函数写成下面这样:#includeQtGui/QApplication#includewidget.h#includemydlg.hintmain(intargc,char*argv[]){QApplicationa(argc,argv);myDlgmy1;if(my1.exec()==QDialog::Accepted){Widgetw;w.show();}returna.exec();}这样,因为w是在if语句里定义的,所以当if语句执行完后它就无效了。这样导致的后果就是,按下enterBtn后,主界面窗口一闪就没了。如果此时对程序改动了,再次点击运行时,就会出现error:collect2:ldreturned1exitstatus的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有结束,而是在后台运行。所以这时改动程序,再运行时便会出错。你可以按下调试栏上面的红色Stop停止按钮来停止程序运行。你也可以在windows任务管理器的进程中将该进程结束,而后再次运行就没问题了,当然先关闭QtCreator,而后再重新打开,这样也能解决问题。如果把程序改为这样:#includeQtGui/QApplication#includewidget.h#includemydlg.hintmain(intargc,char*argv[]){QApplicationa(argc,argv);myDlgmy1;Widgetw;if(my1.exec()==QDialog::Accepted){w.show();}returna.exec();}这样虽然解决了上面主窗口一闪而过的问题,但是,如果在my1对话框出现的时候不点enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但是事实是这样的吗?如果你此时对程序进行了改动,再次按下run按钮,你会发现又出现了error:collect2:ldreturned1exitstatus的错误,这说明程序并没有结束,我们可以打开windows任务管理器,可以看到我们的程序仍在执行。因为returna.exec();一句表示只要主窗口界面不退出,那么程序就会一直执行。所以只有用第一种方法,将该语句也放到if语句中,而在else语句中用elsereturn0;,这样如果enterBtn没有被按下,那么程序就会结束执行了。到这里,我们就实现了一个界面结束执行,然后弹出另一个界面的程序。下面我们在主窗口上加一个按钮,按下该按钮,弹出一个对话框,但这个对话框关闭,不会使主窗口关闭。8.如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择gotoslot。9.我们选择单击事件clicked()。10.我们在弹出的槽函数中添加一句:my2.show();my2为我们新建对话框类的另一个对象,但是my2我们还没有定义,所以在widget.h文件中添加相应代码,如下,先加入头文件,再加入my2的定义语句,这里我们将其放到private里,因为一般的函数都放在public里,而变量都放在private里。#ifndefWIDGET_H#defineWIDGET_H#includeQtGui/QWidget#includemydlg.h//包含头文件namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=0);~Widget();private:Ui::Widget*ui;myDlgmy2;//对my2进行定义privateslots:voidon_pushButton_clicked();};#endif//WIDGET_H到这里,再运行程序,便能完成我们实验要求的功能了。整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。三、QtCreator登录对话框(原创)实现功能:在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框。实现原理:通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用if语句进行判断。实现过程:1.先新建Qt4GuiApplication工程,工程名为mainWidget,选用QWidget作为Baseclass,这样便建立了主窗口。文件列表如下:2.然后新建一个QtDesignerFormClass类,类名为loginDlg,选用DialogwithoutButtons,将其加入上面的工程中。文件列表如下:3.在logindlg.ui中设计下面的界面:行输入框为LineEdit。其中用户名后面的输入框在属性中设置其objectName为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。4.将exitBtn的单击后效果设为退出程序,关联如下:5.右击登录按钮选择gotoslot,再选择clicked(),然后进入其单击事件的槽函数,写入一句voidloginDlg::on_loginBtn_clicked(){accept();}6.改写main.cpp:#includeQtGui/QApplication#includewidget.h#includelogindlg.hintmain(intargc,char*argv[]){QApplicationa(argc,argv);Widgetw;loginDlglogin;if(login.exec()==QDialog::Accepted){w.show();returna.exec();}elsereturn0;}7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。8.添加用户名密码判断功能。将登陆按钮的槽函数改为:voidloginDlg::on_loginBtn_clicked(){if(m_ui-usrLineEdit-text()==tr(qt)&&m_ui-pwdLineEdit-text()==tr(123456))//判断用户名和密码是否正确accept();else{QMessageBox::warning(this,tr(Warning),tr(usernameorpassworderror!),QMessageBox::Yes);//如果不正确,弹出警告对话框}}并在logindlg.cpp中加入#includeQtGui的头文件。如果不加这个头文件,QMessageBox类不可用。9.这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。如果输入错误
本文标题:qt+creator系列教程(上)
链接地址:https://www.777doc.com/doc-3150859 .html