[转帖]【推荐】QT实例精析_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3526 | 回复: 0   主题: [转帖]【推荐】QT实例精析        下一篇 
baijiang.lu
注册用户
等级:少校
经验:947
发帖:81
精华:0
注册:2013-9-2
状态:离线
发送短消息息给baijiang.lu 加好友    发送短消息息给baijiang.lu 发消息
发表于: IP:您无权察看 2013-9-9 15:40:55 | [全部帖] [楼主帖] 楼主

这篇文章,教你怎么用Qt Creator2.0来做一个GUI。

下载地址什么的不罗嗦,google之。

我这里给出的,是每个QT GUI 工程用QT creator来做时的流程。

假设你已经安装好了qt sdk。

1.文件->新建工程或文件。

2.选择Qt控件项目->QT GUI应用。

3.取消 “隐藏生成的文件选项”

4.布局ui文件

(这步的详细操作略去,很多书都会说这个,我只说书上说得不清楚的)

5.编译该ui文件,这时,会出现一个ui_xxx.h的文件。

接下来,就是代码修改了。这里分别给出原始文件和修改后的文件内容。代码注释在修改后的文件上。

以建立一个叫test的工程为例,修改后的工程,可以执行对话框的功能。

一、首先修改test.h

test.h未修改前代码:(需要说明的是,我的修改前代码和你的可能不同,不过没影响)

cpp代码:

  1. #ifndef TEST_H 
  2. #define TEST_H 
  3. #include <QMainWindow> 
  4. namespace Ui { 
  5.        class test; 
  6. class test : public QMainWindow 
  7.        Q_OBJECT 
  8.       
  9.       public: 
  10.        explicit test(QWidget *parent = 0); 
  11.        ~test(); 
  12.       
  13.       private: 
  14.        Ui::test *ui; 
  15. }; 
  16. #endif // TEST_H

修改后的test.h代码

cpp代码:

  1. #ifndef TEST_H 
  2. #define TEST_H 
  3. #include <QDialog> //因为要继承QDialog 
  4. #include "ui_test.h" //引用了ui_test.h,ui_test.h文件不能做任何更改,即使做了更改,在再次编译test.ui的时候,这些更改都会消失 
  5. class GoToCellDialog : public QDialog, public Ui::GoToCellDialog 
  6. //这里声明的class名,惯例是使用Ui后面的名字 
  7. //为什么要继承QDialog?因为ui_test.h中定义的Ui::GoToCellDialog函数,没有完全继承QDialog的特性,接下来的操作中,还有可能用到 
  8.        Q_OBJECT//如果有声明signals, slots,则必须写这一句,这样qt的编译器才能识别下面的这些生命 
  9.       
  10.       public: 
  11.        explicit GoToCellDialog(QWidget *parent = 0);//典型的窗口部件类定义中的构造函数,注意定义方式,没有必要关联基类 
  12.        //QWidget * parent参数用于说明谁是其父窗口部件,该参数的默认值是一个空指针,意味着该对话框没有父对象 
  13.        ~GoToCellDialog();//析构函数,可选,如果在这里声明,就必须实现 
  14.       
  15.        private slots: 
  16.        void on_lineEdit_textChanged();//注意这种slots的函数名书写方式 
  17.        //创建用户接口后,setupUi函数会自动将那些符合on_objectName_signalName()的任意slot与相应的objectName的signalName()连接 
  18.        //这里,就意味着,如果实现用户接口,就会自动运行如下代码 
  19.        //connect(lineEdit, SIGNAL(testChanged(const QString &)), this, SLOT(on_lineEdit_textChanged())); 
  20. }; 
  21. #endif // TEST_H 

二、接下来修改test.cpp代码

test.cpp未修改前代码

cpp代码:

  1. #include "test.h" 
  2. #include "ui_test.h" 
  3. test::test(QWidget *parent) : 
  4.  QMainWindow(parent), 
  5.  ui(new Ui::test) 
  6.        ui->setupUi(this); 
  7. test::~test() 
  8.        delete ui; 

test.cpp修改后代码

cpp代码

  1. #include <QtGui> 
  2. #include "test.h" 
  3. //现在开始实现test.h,这里,test.h中的类已经是通过继承的类了。注意这个文件include的文件 
  4. GoToCellDialog::GoToCellDialog(QWidget *parent) : 
  5.  QDialog(parent)//注意实现方式,parent参数传递给了基类构造函数, 
  6.        //子类的构造函数,可以看出,GUI程序的界面设计和功能实现,都是在构造函数中完成的。 
  7.        setupUi(this);//这里开始初始化自己 
  8.       
  9.  QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}"); 
  10.        lineEdit->setValidator(new QRegExpValidator(regExp, this)); 
  11.       
  12.        connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); 
  13.        connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); 
  14.        //accept(),reject()槽都是QDialog的槽,这两个槽都可以关闭对话框,并且会设置对话框的值 
  15.        //QDialog::Accepted, QDialog::Rejected 
  16. void GoToCellDialog::on_lineEdit_textChanged() 
  17.        okButton->setEnabled(lineEdit->hasAcceptableInput()); 
  18. GoToCellDialog::~GoToCellDialog() 
  19.        //todo 

三、修改main.cpp代码

main.cpp修改前代码

cpp代码:

  1. #include <QtGui/QApplication> 
  2. #include "test.h" 
  3. int main(int argc, char *argv[]) 
  4.        QApplication a(argc, argv); 
  5.        test w; 
  6.        w.show(); 
  7.       
  8.        return a.exec(); 

main.cpp修改后代码

cpp代码:

  1. #include <QApplication> 
  2. #include "test.h" 
  3. //这里没啥好解释的... 
  4. int main(int argc, char *argv[]) 
  5.        QApplication a(argc, argv); 
  6.        GoToCellDialog *dialog = new GoToCellDialog;//看下这个继承类的构造函数,注意这里采用默认参数0,即没有父类 
  7.        dialog->show(); 
  8.       
  9.        return a.exec(); 

然后编译运行,搞定。

可以说,基本上每个QT GUI工程都是按照这个来做的。修改后的代码执行一个对话框的功能。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论