Qt Designer小观与qmake设置与使用

来源:互联网 发布:合力叉车 知乎 编辑:程序博客网 时间:2024/05/21 02:20

Desinger

是一个可视化的工具,尤其可以使布局简单,不过总有强人告诉我直接用代码更好~o(╯□╰)o

还是先来学习这个吧。

无论用编写代码的方式还是用Qt Designer,创建对话框都有如下基本的步骤:
1
、创建和初始化子控件。
2
、把子控件放到布局管理器中。
3
、设置tab顺序。
4
、创建信号和槽。
5
、实现对话框的自己的槽函数。

然后我们设计一个有个textlabel,一个lineEdit,一个分隔符,2个pushbutton的小对话框,其中按钮一个是okButton和cancelButton把对话框设计好以后,保存为.ui文件。其中制作过程可以参考那本with Qt 4(宝书)。然后用文本编辑器写一个main.cpp放到同一文件夹下。

  这段要说一下了,我们可以直接我creator,但是为了了解qmake,先这么做。

#include <QApplication>
#include <QDialog>
#include "ui_gotocelldialog.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::GoToCellDialog ui;
    QDialog *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog->show();
    return app.exec();
}

这段代码以后也要修改。

然后运行qmake

现在来了解qmake,qmake是个什么东西呢,qmake可以使你的纯文本编译的代码生成.pro文件,然后再生成Makefile。之后也可以生成.exe。就是说qmake自动帮你完成了编译器要完成的功能。我们用creator来做其实是一样的顺序。只不过界面更加友好简便了。

那么在控制台下(windows)

我推荐用Qt Command Prompt,不用设置太麻烦的环境变量,还可以在其中输入-edit直接来写代码。

环境变量的设置见后面的附录

qmake -project

qmake ***.pro

就可以了,qmake非常的天才,可以自动检测ui并且转化成等价的头文件。

然后我们run一下发现可以看,就是不能用。然后就这本书就创建一个新类,此类继承自QDialog和ui,实现功能,废话少说。代码如下

gotocelldialog.h

#ifndef COTOCELLDIALOG_H

#define GOTOCELLDIALOG_H
#include <QDialog>
#include "ui_gotocelldialog.h"
class GoToCellDialog : public QDialog, public Ui::GoToCellDialog//继承了2个
{
Q_OBJECT
public:
GoToCellDialog(QWidget *parent = 0);
private slots:
void on_lineEdit_textChanged();//如果用on_objectName_signalName()命名的任意槽与相应的objectName()的signalName(
                                                   //自动连接这是很方便的一种机制。
};
#endif
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
gotocelldialog.cpp

#include <QtGui>

#include "gotocelldialog.h"
GoToCellDialog::GoToCellDialog(QWidget *parent)
              :QDialog(parent)
 {
 setupUi(this);
 QRegExp RegExp("[A-Za-z][1-9][0-9]{0,2}");//这里复制下原著
[xhtml] view plaincopy
  1. Qt提供了三个许可器类:QIntValidator,QDoubleValidator和QRegExpValidator。这里我们使用了QRegExpValidator,使用的表达式为“[A-Za-z][1-9][0-9]{0,2}”这个表达式的意思是第一个字符输入为大写或者小写字母,第二个字符为一个数字范围是1到9,第三个字符是一个数字范围为0到9。在QRegExpValidator的构造函数中,第二个参数为this,把当前类作为它的父控件,这样就可以不用删除它,父控件析构时可以被自动删除。  
  2. Qt的父子机制在QObject中实现的。当我们创建一个带有父的对象(如一个子控件,一个许可器,布局管理器等)时,父对象把子对象放到自己的子对象列表中。父对象被删除时,它查找自己的子对象并把每一个删除掉。这些子对象再把自己的子对象删除掉,如此递归,知道删除所有对象。  
  3.     这种父子对象的机制简化了内存管理,减少了内存泄漏的危险。需要程序员删除的对象就是我们使用new创建的没有父对象的对象。如果我们在父对象存在时删除了它的一个子对象,Qt将会在父列表中自动删除。(需要记住的是Qt只是删除有父的对象,父对象还是需要手动删除的,还有就是那些用new申请的没有指定父的内存,一般情况下,在对话框里的子控件,许可器和布局管理器由Qt自己管理,其他还要程序员小心删除)  
  4. 对于控件来讲,父对象还有一个意义:子控件在父对象的显示区域内显示。当父控件删除后,子控件不但在内存中被删除,它也同时在屏幕上消失。  
  5. 在构造函数的最后两行,把QDialog的accept()函数连接到OK按钮的点击信号,把Cancel按钮的点击信号连接到reject()函数。这两个槽函数都关闭这个对话框,但是accept()返回 QDialog::Accepted(值为1),reject()返回值为QDialog::Rejected(值为0)。不同的返回值可以判断用户点击了那个按钮。  
  6.     on_lineEdit_textChanged()槽函数控制Ok按钮的可用状态,通过编辑框中的输入字符,如果字符有效Ok按钮则有效,否则为不可用状态。QLineEdit::hasAcceptableInput()根据我们在构造函数中设置的许可器返回bool值。  
 lineEdit->setValidator(new QRegExpValidator(RegExp,this));
 connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
 connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
 }
void GoToCellDialog::on_lineEdit_textChanged()
{
okButton->setEnabled(lineEdit->hasAcceptableInput());
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
最后我们修改的main.cpp
#include<QApplication>
//#include<QDialog>
#include"gotocelldialog.h"
int main(int argc , char *argv[])
{
QApplication app(argc, argv);
GoToCellDialog *dialog = new GoToCellDialog;
//ui.setupUi(dialog);
dialog->show();
return app.exec();
}
然后我们一样qmake -project
qmake ***pro
之后我们就可以看到一个很不错的对话框了。但是我还是推荐用creator的方式来写,因为这个要是写错了,根本不知道那里有的问题。
不过这么先这么写一下,了解一下以后是有用的。
附录:
[c-sharp] view plaincopy
  1. Qt环境变量的设置可以可以参考Qt安装目录bin文件夹下的qtenv.bat的设置,比如我的安装路径为D:/study/program/qt,那么该目录就在D:/study/program/qt/bin/qtenv.bat,其内容为:  
  2.   
  3. @echo off  
  4. rem  
  5. rem This file is generated  
  6. rem  
  7. echo Setting up a MinGW/Qt only environment...  
  8. echo -- QTDIR set to D:/study/program/qt/qt  
  9. echo -- PATH set to D:/study/program/qt/qt/bin  
  10. echo -- Adding D:/study/program/qt/bin to PATH  
  11. echo -- Adding %SystemRoot%/System32 to PATH  
  12. echo -- QMAKESPEC set to win32-g++  
  13. set QTDIR=D:/study/program/qt/qt  
  14. set PATH=D:/study/program/qt/qt/bin  
  15. set PATH=%PATH%;D:/study/program/qt/bin;D:/study/program/qt/mingw/bin  
  16. set PATH=%PATH%;%SystemRoot%/System32  
  17. set QMAKESPEC=win32-g++  
  18.   
  19. 上面是批处理代码,其涵义简述如下:  
  20.   
  21. @:表示后面的命令不回显  
  22.   
  23. echo:命令参数为[on] [off] [message] 分别表示[以后的命令都显示][都不显示][显示message]  
  24.   
  25. rem:是注释用的。  
  26.   
  27. set:命令参数为[variable=[string]]用来显示,设置或删除环境变量,variable为变量名,string为其值。  
  28.   
  29. 那么,环境变量的设置方法为:  
  30.   
  31. (1)、右键单击“我的电脑”-“属性”-“高级”-“环境变量”-“系统变量”  
  32.   
  33. (2)、“新建”,变量名设置为:QTDIR,变量值设置为:D:/study/program/qt/qt  
  34.   
  35. (3)、同2,“新建”,变量名设置为:QMAKESPEC,变量值设置为:win32-g++  
  36.   
  37. (4)、path变量一般都会有,只要添加就行了,双击path变量,在变量值后面添加:;D:/study/program/qt/qt/bin;D:/study/program/qt/bin;D:/study/program/qt/mingw/bin;%SystemRoot%/System32  
  38.   
  39. (5)、上述变量和值必须和qtenv.bat中的对应,然后就OK了。  
  40.   
  41. ---------------------------------------------------------------------------------------------------------------------------------  
  42.   
  43.   
  44. 下面是我添加的修改注册表的方法:  
  45.   
  46. @echo off  
  47. rem @ 后面的语句不回显  
  48. rem echo off 后面的所有命令不回显  
  49. reg add "HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v QTDIR /d "D:/study/program/qt/qt" /t Reg_SZ /f  
  50. reg add "HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v Path /d "%path%;D:/study/program/qt/qt/bin;D:/study/program/qt/bin;D:/study/program/qt/mingw/bin;%SystemRoot%/System32" /t REG_EXPAND_SZ /f  
  51. reg add "HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v QMAKESPEC /d "win32-g++" /t Reg_SZ /f  
  52. pause  
  53.   
  54. 上面代码保存为qt.bat,双击运行即可,注意:里面红颜色的部分请与你的qtenv.bat对应部分对应好,如果怕误操作,请先备份注册表。  
  55.   
  56. 转载自:http://hi.baidu.com/秀才太守  
我就是照着这个来弄的。不过我一直用的是Qt Command Prompt。
原创粉丝点击