一、环境配置
用VS新建一个win32控制台应用程序,我们假设工程名为:Hello。
选择工具->选项->项目和解决方案->VC++目录。
(1) 选择“可执行文件”,在里面添加:C:\Qt4.7.0\bin;
(2) 选择“包含文件”,在里面添加:C:\Qt4.7.0\include; C:\Qt4.7.0\include\Qt; C:\Qt4.7.0\include\QtCore; C:\Qt4.7.0\include\QtGui
(3) 选择“库文件”,在里面添加:C:\Qt4.7.0\lib;
二、开始编程
1. 选择菜单上的“QT”选项- >“Launch Designer” ,启动designer : 放入一个“label”,内容写为:helloQT。然后保存为Hello.ui,再将它添加到源文件中。
右击“Hello.ui”->“属性”->“自定义生成步骤”:
命令行:uic.exe Hello.ui -o HelloUi.h
输出:HelloUi.h
附加依赖项:uic.exe; Hello.ui
然后,点击“确定”。这时再右击“Hello.ui”,选择“编译”,则会生成HelloUi.h。将它添加到工程中。
2. 在Hello.cpp中编写代码:
3. 选择“项目”,“Hello属性”,“配置属性”:
(1) “常规”:选择“字符集”为“使用多字节字符集”;
(2) “调试”:填写“环境”值为:PATH=C:\Qt4.7.0\bin;
填写“合并环境”值为:是;
(3) “链接器”:进入“常规”选项,填写“附加库目录”为:C:\Qt4.7.0\lib;
进入“输入”选项,填写“附加依赖项”为:qtcore4.lib qtgui4.lib
(注意,这两个库之间为空格,不能写逗号)
信号和槽 信号signals的声明是头文件中进行的(槽的声明也在头文件中声明,同时要在类声明的开始处加上Q_OBJECT语句,这将告诉编译器在编译之前必须用moc工具进行扩展),并且moc 工具会注意不要将信号定义在实现文件中,使用signals关键字标示信号声明区,随后可声明自己的信号。
信号signals没有public\private\protected等属性,这点不同于slots。
信号signals的返回值为void
槽slots有public slots、private slots、protected slots (方法)
信号signals/事件->(驱动)槽slots/方法
元对象 QT的元对象系统为QT提供了对象间通信的信号与槽机制、实时类型信息、动态属性系统等方面的功能。
元对象系统在QT中主要有以下三个部分构成:QObject类、Q_OBJECT宏、元对象编译器moc
3.vs中QT显示中文:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QFont font("Times",12,QFont::Normal,FALSE);
app.setFont(font);
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
//QFont font("Times",12,QFont::Normal,FALSE);
//a.setFont(font);
4.QAction类的用法
1、QAction::QAction ( const QString & text, QObject * parent )
QAction类的构造函数之一,利用text,parent创建QAction对象。QAction对象一般为菜单中的菜单项,比如 "文件"菜单中"新建"选项就是一个QAction对象,
上述构造函数中text成员变量 即为菜单项所表示的内容
用法:QAction *newAction = new QAction(tr("&New"),this);
2、void QAction::setIcon ( const QIcon & icon )
该函数可设置菜单项名称前的图标
用法:newAction->setIcon(QIcon(":/images/new.png"));
3、void QAction::setShortcut ( const QKeySequence & shortcut );
设置QAction对象执行的快捷键
用法:newAction->setShortcut(tr("Ctrl+N"));
4、void QAction::setStatusTip ( const QString & statusTip );
设置当鼠标移动到“动作”上时,状态栏显示的提示语。
5、void QAction::setVisible ( bool );
设置“动作”显示与否,当形参为true是,“动作”表示。
6、void QAction::triggered ( bool checked = false ) [signal]
此函数为信号,当用户触发此“动作”时,此信号发射。例如用户点击了菜单中的菜单项等。
此函数一般用法为:在QObject::connect()函数中作为信号参数,用于触发“动作”所对应执行的槽函数——实现“动作”的功能函数,例如:“新建”按钮被用户按下,
所需要的功能可能 是新建一个文档,那么新建一个文档的动作就在这个槽函数中实现。至于此信号函数中的形参暂时可以忽略。以后会在介绍QObject类中的静态方法connect()函数时详细解说。
7、void QAction::setCheckable ( bool );
此函数用于设置QAction类中的私有变量: bool checkable ,此属性用以提供“动作”是否为复选动作,例如Qt Creator中“控件”菜单中的“全屏”菜单项即为复选动作
菜单
5 QMainWindow类用法
1、void QMainWindow::setCentralWidget ( QWidget * widget );
此方法作用为设置传入部件为主窗口布局的中心领域部件。传入部件可为任意的部件或QWidget类的子类部件。对于“部件”这个词的理解可以理解为某机器上的一个螺丝、一个配件等等,其实部件就是螺丝和某配件的一个抽象感念嘛,他们都叫做部件,但是却有着不同的作用和形状。以后会遇到很多类继承QWidget类的。相信大家都比笔者聪明,或许我是在说些废话,呵呵。
举例:
在自定义的继承于QMainWindow的来构造函数里面:
QTableWidget *table = new QTableWidget; //QTableWidget继承于QWidget类;
setCentralWidget(table);
2、void QMainWindow::setWindowIcon ( const QIcon & icon );
设置窗口左上角图标,支持PNG、BMP、GIF、FPEG、PNM、XBM、XPM格式文件。
一下为几种GUI应用程序提供资源的方法:
①将图片存入文件,在程序运行时加载
②将XPM文件包含在源程序中,因为XPM文件是有效的C++文件
③使用Qt的资源机制————此种方式不仅仅支持图片格式文件,而且支持任何格式的文件
3、QMenuBar *QMainWindow::menuBar() const;
此方法返回一个主窗口的菜单栏对象指针。如果在调用此方法时,主窗口不存在菜单栏,则此方法会创建一个空的菜单栏。在Mac应用程序中,如想在多个主窗口之间共享一个菜单栏,则需要使用QMenuBar *menuBar = new QMenuBar(0);形式创建菜单栏,即创建一个无父部件的菜单栏对象。
这里解释一下什么叫做父部件,初学一定对这个概念不理解,这里的父部件不是C++中类的继承关系,而是部件与部件的关系。我也是学习了一段时间才慢慢悟出这里面的道理的。我看的是《C++ GUI Programming with Qt 4》英文原版,本来理解起来就有些障碍,再遇到这样新的概念词汇,更是不知其所云。为什么看英文原版书呢,个人觉得国内翻译的不是很到位,可能在某个地方或关键点给我造成误导,貌似扯远了。。。即说说父部件是个什么东西,现在为大家打个比方,一张电脑桌由多个部件构成,如桌面,桌子腿,抽屉等等,抽屉上面有抽屉把手,那么抽屉就是抽屉把手的父部件,电脑桌就是抽屉的父部件。相信这样解释,大家一定就会理解了。
4、QToolBar * QMainWindow::addToolBar ( const QString & title );
此函数为重载函数,其余两个为已创建了工具栏(QToolBar)对象时,将工具栏对象添加到QMainWindow对象中。下面就会马上列出这两个类方法。在调用此方法时,会创建一个QToolBar对象,返回这个对象的指针,并在主窗口顶部工具栏区域中显示。
5、void QMainWindow::addToolBar ( Qt::ToolBarArea area, QToolBar * toolbar );
与上个函数构成重载关系,此函数第二个形参为已定义好的工具栏对象指针,第一个形参工具栏表示的位置,此形参为枚举型变量。
工具栏表示位置共4种,即左右上下:
(1) Qt::LeftToolBarArea 0x1
(2) Qt::RightToolBarArea 0x2
(3) Qt::TopToolBarArea 0x4
(4) Qt::BottomToolBarArea 0x8
6、void QMainWindow::addToolBar ( QToolBar * toolbar );
与调用 addToolBar(Qt::TopToolBarArea, toolbar) 方法效果相同,即调用 addToolBar(Qt::TopToolBarArea, toolbar) 方法,工具栏显示区域默认为主窗口顶部。
7、QStatusBar *QMainWindow::statusBar() const;
当主窗口状态栏不存在时,创建状态栏,并返回状态栏对象指针。一般在自定义QMainWindow子类的构造函数时使用,创建状态栏对象。创建后,添加QLabel对象,以显示主窗口状态或菜单栏中按钮的状态提示。
相信通过3、4、5、6、7、QMainWindow类方法的学习,大家应该掌握了创建菜单栏,工具栏和状态栏的方法。通常的主窗口一般也就需要这些东西了。但要想让菜单栏,工具栏以及状态栏能有自己的动作或行为,还需要其他类的配合使用。大家不用急,QMainWindow类简单介绍完毕之后,会介绍这些相关的类及其使用方法。
8、void QMainWindow::setWindowModified(bool);
当此函数形式参数为true时,即设置了WindowModified属性为true,意思为表明先编辑的文档有更新,这时,Qt会自动更新标题栏,Mac OS X 系统上在主窗口的关闭按钮上将出现一个变更的样式,其他系统或平台上会在主窗口标题栏的文件名后多显示一个“*”。
void MainWindow::open()
{
QDialog *dialog = new QDialog;
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setWindowTitle(tr("Hello, dialog!"));
dialog->show();
void MainWindow::open()
{
QDialog dialog(this);
dialog.setWindowTitle(tr("Hello, dialog!"));
dialog.exec();
}