linux平台下的QT3快速开发入门 二444078092
linux平台下的QT3快速开发入门(二)
二、编写代码
1、主入口函数。
用文本编辑器在工程目录下创建一个main.cpp文件, 代码如下:
#include <application.h>
#include "logindialog.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
LoginDialog *dialog = new LoginDialog;
app.setMainWidget(dialog);
dialog->show();
return app.exec();
}
保存退出,输入以下命令编译程序:
qmake -project
qmake
make
现在可以输入 ./qtlogin 运行这个程序(如图),只是按下“确定”按钮是没有反应的。因为checkPasswd()槽的功能还没有实现。

2、实现我们所想要的功能。
观察一下现在的工程目录会发现多了很多文件,Qt的用户界面编译器工具uic会对界面文件 *.ui 文件自动生成对应的 *.h 和 *.cpp文件。如:logindialog.ui会生成logindialog.h和logindialog.cpp这两个文件。我们一般不能在这两个文件里面加入我们的代码,因为如果一旦修改界面,里面的代码就全没了。我们的代码有两种实现方法:
(1)把代码加到*.ui.h文件中,这样uic工具会自动合并我们的代码。
用文本编辑器在工程目录下编辑文件logindialog.ui.h,代码如下:
void LoginDialog::init()
{
//你可以把初始化的代码写到这里,uic工具会自动的在这个LoginDialog窗体的构造函数的最后调用这个init()函数。
}
void LoginDialog::checkPasswd()
{
if (nameEdit->text() == "myname"
&& passwdEdit->text() == "mypasswd")
{
MainForm * form = new MainForm;
form->show();
this->hide();
}
}
(2)另外一种实现方法是创建另外一个类,这个类继承uic生成的类,然后在新创建的这个类里面添加额外的功能。
如下是实现代码:
头文件logindialogImpl.h的代码:
#include "logindialog.h"
class LoginDialogImpl : public LoginDialog
{
Q_OBJECT
public:
LoginDialogImpl(QWidget *parent = 0, const char *name = 0);
public slots:
virtual void checkPasswd();
};
源文件logindialogImpl.cpp的代码:
#include <qlineedit.h>
#include "logindialogimpl.h"
#include "mainform.h"
LoginDialogImpl::LoginDialogImpl(QWidget *parent, const char *name)
: LoginDialog(parent, name)
{
//在这里加入初始化代码
}
void LoginDialogImpl::checkPasswd()
{
if (nameEdit->text() == "myname"
&& passwdEdit->text() == "mypasswd")
{
MainForm * form = new MainForm;
form->show();
this->hide();
}
}
提示:喜欢使用子类这种方法的开发者可以称基类为LoginDialogBase, 派生类为LoginDialog, 这样可以使具有完全功能的类有比较好的名称。
至此这个例子也经完成,重新输入qmake -project,qmake, make编译,并执行程序看看是效果。
数据正在载入中..
