黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks

一、环境配置

     用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();
    }

     

     

    posted on 2015-08-22 14:55 情绝格调(fresmaster) 阅读(628) 评论(0)  编辑 收藏 引用 所属分类: Documents

    只有注册用户登录后才能发表评论。
    网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理