zoukankan      html  css  js  c++  java
  • <C++ QT4 GUI 编程>第三章笔记

    closeEvent():

    这是QWidget类中的一个虚函数,当用户关闭窗口时,会自动调用这个函数,因此我们可以重新实现这个函数,使应用可以在退出时实现我们想要的功能,函数声明为void closeEvent(QCloseEvent *event);

    Qt资源机制:

    资源机制是Qt为应用程序提供图片的方法之一,其他两种分别为把图片保存为文件并在运行中载入,第二种是把XPM文件包含在源代码中。资源机制使用一种简单的XML格式,把图片放在源代码树中,所有资源文件都会编译到应用程序的可执行文件中,因此并不会把文件弄丢,并比运行时载入的方法更方便,资源可以是任意文件。资源文件的后缀为.qrc,使用资源文件只需在.pro中添加RESOURCES = xxx.qrc即可。

    槽函数的返回值:

    槽函数可以带返回值,当他作为信号槽使用时,返回值会被忽略,当他作为普通函数使用时,返回值的作用和普通函数一样。

    创建菜单和工作栏需要以下步骤:

    1、创建并且设置动作

    2、创建菜单并且把动作添加到菜单上

    3、创建工作栏并且把动作添加到工作栏上

    创建菜单和工作栏例子:

    //.h中定义

    QAction *newAction;

    QMenu *fileMenu;

    QToolBar *fileToolBar;

    //.cpp

    //执行构造函数实例化,第一个参数是动作的名字,字符串中&的作用是让Alt+N成为快捷键

    newAction = new QAction(tr("&New"),this);   

    //设置图标               

    newAction->setIcon(QIcon("./new.png"));  

    //设置快捷键                     

    newAction->setShortcut(QKeySequence::New);

    //状态栏信息                 

    newAction->setStatusTip(tr("Create a new file"));  

    //动作的信号槽         

        connect(newAction,SIGNAL(triggered()),this,SLOT(newFile()));

    //添加新的菜单项,快捷键是Alt+F,大小写都可以,如果要执行newAction的动作,点击Alt+F+N,菜单栏会在第一次调用menuBar()时创建出来

    fileMenu = this->menuBar()->addMenu(tr("&File"));      

    //为菜单栏中的项添加动作     

    fileMenu->addAction(newAction);

    //添加工具栏,并添加相应动作

    fileToolBar = this->addToolBar(tr("&File"));

        fileToolBar->addAction(newAction);

    效果如下:

     

    创建状态栏:

    //.h

    QLabel *locationLabel ;

    QLabel *formulaLabel;

    //.cpp

    locationLabel = new QLabel("Location");

    locationLabel->setAlignment(Qt::AlignHCenter);

    locationLabel->setMinimumSize(locationLabel->sizeHint());

    formulaLabel = new QLabel("Formula");

    formulaLabel->setIndent(3);                 //缩进像素

    //在第一次调用statusBar()时会将状态栏创建出来,调用QAcition::setStatusTip(const QString &statusTip)可以让鼠标指向该动作按键时在状态栏中出现提示

    statusBar()->addWidget(locationLabel);

    statusBar()->addWidget(formulaLabel,1); //第二个参数是伸展因子,作用是让第二个标签占据剩下的空间

    QMessage:

    QMessage类提供了一个模态对话框,用于与用户的交互,它提供可许多标准的按钮。其中QMessage::warnning的用法如下:QMessage::warnning(parent,title,message,button); 除了warnning还有infomation()question()critical(),他们都有特定的图标:

     

    QMessage::warinning()用法实例:

    int r = QMessageBox::warning(this,tr("Spreadsheet"),

              tr("The document has been modify "

                      "Do you want to save your changes?"),

                                          QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);

    if(r == QMessageBox::Yes);

         效果如下:

     

     

    QFileDialog::getOpenFileName()

    QFileDialog::getOpenFileName()函数会弹出一个文件框,让用户选择一个文件并返回它的文件绝对路径,用户点击Cancel返回一个空字串。QFileDialog::getSaveFileName()也是如此。

    函数原型为:

    static QString getOpenFileName(QWidget *parent = 0,

                                   const QString &caption = QString(),

                                   const QString &dir = QString(),

                                   const QString &filter = QString(),

                                   QString *selectedFilter = 0,

                                   Options options = 0);

    第一个参数为父对象,指定父对象后窗口部件会显示在父对象部件的中间。

    第二个参数是对话框使用的标题,第三个参数是开始的路径,第四个参数是文件过滤器。

    使用实例如下:

    QString fileName = QFileDialog::getOpenFileName(this,

    tr("open SpreadSheet"),

                              ".",

                     tr("SpreadSheet file (*.sp) "

                              "My very special flile(*.vsf)"));

     

     

    QApplicant::setQuitOnLastWindowClosed(false)

    当最后一个窗口关闭时,这个应用程序就结束,假如想禁用这种行为,可以调用函数QApplicant::setQuitOnLastWindowClosed(false),在这种情况下,程序将会继续运行,知道调用QApplicant::quit()

     

    QFileInfo

        QFileInfo类提供与系统无关的文件信息。

    QFileInfo提供有关文件在文件系统中的名称和位置(路径),其访问权限以及它是目录链接还是符号链接等信息。文件的大小和上次修改/读取时间也可用。 QFileInfo也可以用于获取有关Qt资源的信息。

    使用实例:

    #ifdef Q_OS_UNIX

     

    QFileInfo info1("/home/bob/bin/untabify");

    info1.isSymLink();          // returns true

    info1.absoluteFilePath();   // returns "/home/bob/bin/untabify"

    info1.size();               // returns 56201

    info1.symLinkTarget();      // returns "/opt/pretty++/bin/untabify"

    info1.fileName;   //returns “untabify” 

     

    QFileInfo info2(info1.symLinkTarget());

    info2.isSymLink();          // returns false

    info2.absoluteFilePath();   // returns "/opt/pretty++/bin/untabify"

    info2.size();               // returns 56201

     

    #endif

     

    qobject_cast

    这是强制类型转换符,原型是T qobject_cast(QObject * object),如果对象是类型T(或子类),则返回转换为类型T的给定对象。 否则返回0。如果object0,那么它也将返回0。类T必须(直接或间接)继承QObject,并使用Q_OBJECT宏进行声明。

    实例如下:

    QObject *obj = new QTimer;          // QTimer inherits QObject

     

    QTimer *timer = qobject_cast<QTimer *>(obj);

    // timer == (QObject *)obj

     

    QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);

    // button == 0

    当有多个对象发射信号连接到同一个槽时,如果需要在槽中判断是哪个对象发出的信号,可以结合qobject_cast用以下代码判断:

     QAction *action = qobject_cast<QAction *>(sender());

     if(action)

     {

         loadFile(action->data().toString());

     }

     

    非模态窗口:

    非模态窗口就是运行在应用程序中,对于其他窗口都独立的窗口,即这个窗口存在的时候可以操作其他窗口。若对话框是通过show()调用的,那么它就是非模态对话框,除非此后又调用setModal()才会让它变成模态对话框。

     

    模态对话框:

        与非模态窗口相反,当存在非模态窗口时不能对其他窗口进行操作。对话框通过调用QDialog::exec(),这个函数可以返回一个true(QDialog::Accepted)值和false(QDialog::Rejected)值,这可以提供给用户进行交互。

     

     

    QSettings类:

     

    QSettings类提供与平台无关的持久性应用程序设置。相当于保存特定应用中的相关信息以及设置,在下次启动时能读回已保存的信息的设置。在不同系统中保存的方式也不同,在Windows中它使用系统注册表,在Unix下是用文本文件保存,在Mac OS X中它会使用Core foundationPreference应用程序变成接口。QSettings把设置的信息储存为键值的形式,以下是代码示例:

     

    //保存设置

     

    QSettings settings("Software Inc.","Spreadsheet");

     

    settings.setValue("geometry",saveGeometry()); //窗口几何形状

     

    settings.setValue("recentFiles",recentFiles); //类型是QStringList

     

    settings.setValue("showGrid",showGridAction->isChecked()); //窗口部件

     

    settings.setValue("autoRecalc",autoRecalculateAction->isChecked());

     

    //读设置

     

    QSettings settings("Software Inc.","Spreadsheet");

     

    restoreGeometry(settings.value("geometry").toByteArray());

     

    recentFiles = settings.value("recentFiles").toStringList();

     

    updateRecentFileActions();

     

     

     

    bool showGrid = settings.value("showGrid").toBool();

     

    showGridAction->setChecked(showGrid);

     

    bool autoRecalc = settings.value("autoRecalc").toBool();

     

    autoRecalculateAction->setChecked(autoRecalc);

     

     

     

    多文档:

     

    main()函数中,MainWindow的对象是在栈上创建的,当函数结束时MainWindow示例会自动销毁,要想实现多文档,就需要用new创建,MainWindow *mainWin = new MainWindow;使用多文档要注意内存管理的问题,可以在MainWindow构造函数中调用函数setAttribute(Qt::WA_DeleteOnClose);告诉窗口在关闭时删除,多文档的更多用法请查看书和查阅资料。

     

     

     

    启动画面:

     

        如果需要在程序运行开始时使用启动画面,可以使用QSplashScreen 类,可以在启动画面上显示一些信息来通知用户有关应用初始化的过程。以下为使用实例:

     

    QSplashScreen *splash = new QSplashScreen;

     

    splash->setPixmap(QPixmap("./bk.png"));

     

    splash->show();

     

    //消息显示的位置

     

    Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;

     

    splash->showMessage("Setting up...",topRight,Qt::black);

     

     

     

    MainWindow w;

     

    w.show();

     

     

    splash->finish(&w);

     

    delete splash;

     

  • 相关阅读:
    使用Hibernate需要导入的一些JAR包
    Eclipse+MyEclipse+Tomcat的配置
    ant安装、环境变量配置及验证
    怎样关闭占用80端口的pid为4的进程
    查看80端口是否被占用
    python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
    WPF--鼠标右键菜单中的Command命令实现
    WPF-TreeView获取文件夹目录、DataGrid获取目录下文件信息
    IOS学习[Swift中跳转与传值]
    IOS学习【xcode 7新特性url链接】
  • 原文地址:https://www.cnblogs.com/qjswxd/p/11839436.html
Copyright © 2011-2022 走看看