<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\n"

                  "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)\n"

                          "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。如果object为0,那么它也将返回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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ GUI Qt4编程(第二版)》一书所有源代码下载地址:http://download.csdn.net/source/3402597。 《C++ GUI Qt4编程(第二版)》,英文名《C++ GUI Programming with Qt4,Second Edition》,作者:【加拿大】Jasmin Blanchette、【英】Mark Summerfield,翻译:闫锋欣、曾泉人、张志强,审校:周莉娜、赵延兵,出版社:电子工业出版社,ISBN:9787121070389,PDF 格式,大小 155Mb。被压缩为 3 部分,本资源是第一部分:第一部分下载地址:http://download.csdn.net/source/3397783;第二部分下载地址:http://download.csdn.net/source/3397770;第三部分下载地址:http://download.csdn.net/source/3397766。 三个资源在一起解压缩后(windows 平台下解压缩)即可得到《C++ GUI Qt4编程(第二版)》.pdf 一书。 内容简介: 本书详细讲述了用最新的qt版本进行图形用户界面应用程序开发的各个方面。前5章主要涉及qt基础知识,后两个部分主要讲解qt的中高级编程,包括布局管理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、xml、国际化、嵌入式编程等内容。对于本书讲授的大量qt4编程原理和实践,都可以轻易将其应用于qt4.4、qt4.5以及后续版本的qt程序开发过程中。   本书适合对qt编程感兴趣的程序员以及广大计算机编程爱好者阅读,也可作为相关机构的培训教材。 目录: 第一部分 qt基础  第1章 qt入门                   第2章 创建对话框           第3章 创建主窗口                  第4章 实现应用程序的功能        第5章 创建自定义窗口部件      第二部分 qt中级  第6章 布局管理  第7章 事件处理  第8章 二维图形  第9章 拖放  第10章 项视图类  第11章 容器类  第12章 输入与输出  第13章 数据库  第14章 多线程  第15章 网络  第16章 xml  第17章 提供在线帮助 第三部分 qt高级 . 第18章 国际经  第19章 自定义外观  第20章 三维图形  第21章 创建插件  第22章 应用程序脚本  第23章 平台相关特性  第24章 嵌入性编程第四部分  附录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值