《C++.GUI.Programming.with.Qt.4》读书笔记Chapter 3

Chapter 3 Creating Main Windows


Section 1 Subclassing QMainWindow

    应用程序的主窗口是通过创建QMainWindow的派生类来完成的。QMainWindow和QDialog一样,都是派生自QWidget。

    closeEvent()是由QWidget提供的一个虚函数,在用户关闭窗口时会被自动调用。

    setCentralWidget()将某个Widget设置为主窗口的central widget, 而central widget意味着在显示时会占据主窗口的中央位置。

    Qt下的GUI 编程支持多种图形格式。存在多种方式为应用程序提供图像,最常见的包括:

    A.将图像存储在文件中,运行时加载之。
    B.在源码中include XPM文件(XPM文件也是合法的C++文件)。
    C.利用Qt的资源机制。

    Qt的资源机制比之运行时加载更方便,并对任何支持的图像格式都能良好工作。

    为了利用Qt的资源机制,需要创建一个资源文件,并在.pro文件中对应添加一行来对资源文件进行标识。

    例如  RESOURCES= spreadsheet.qrc

    资源文件本身则采用了简单的XML格式。它被编译进程序的可执行文件,因此不会被丢失。在对资源进行定位时,使用路径前缀":/",例如“ :/images/icon.png "。而资源本身可以是任何类型的文件。

Section 2 Creating Menus and Toolbars

    Qt通过引入"Action"这一概念简化了对menu和toolbar的编程。Action是一个可以被添加到任意数量menu和toobar的事物。

    在Qt中对menu和toolbar的编程涉及到三个步骤:

    (1).创建并设置Action
    (2).创建menu,并在其中添加Action
    (3).创建toolbar,并在其中添加Action
   
    Action的创建是通过QAction类来实现的,对每个Action,可以为其设置accelerator,parent,shortcut key, 可见性以及status tip等属性,并可以通过调用connect为ACtion设置被触发要执行的操作。

    QTableWidget的基类QAbstraceItemView提供了selectAll()这个slot。

    QApplication类提供了aboutQt()这个slot,可以通过全局变量qApp(一个QApplication指针)来使用之。

    在Qt中,menu由QMenu类的实例表示。而Qmenu是要被放入QMenuBar之中的。函数QMainWindow::menuBar()返回一个类型为QMenuBar * 的指针。QMenuBar::addMenu()根据指定文本创建一个QMenu widget并将其添加进MenuBar中。而QMenu::addAction() 则为Menu添加Action。

    任意Qt Widget都可以具有相关的一系列QAction。通过调用QWidget::addAction() ,可以为Widget添加Action。这一特性可用来创建上下文菜单(context menu)。

Section 3  Setting Up the Status Bar

    QMainWindow::statusBar() 返回一个指向status bar的指针(status bar 在statusBar()第一次被调用时被创建)。


Section 4 Implementing The Menu


    QMessageBox::Defalut修饰符使得被修饰的Button成为默认Button,而QMessage::Escape修饰符则使得Esc键自动触发被修饰的Button。
   
    QMessageBox::warning()用于弹出提示对话框。该函数属于Qt提供的static convenicence function


static convenience function

    QFileDialog::getOpenFileName() 可用于从用户处获得文件名——该函数弹出一个文件选择对话框,要求用户选择一个文件,并返回文件名,或者在用户选择"Cancel"是返回empty string。
   
    QFileDialog::getOpenFileName()的第一个参数是其parent widget。对于dialog和其他widget,parent-child关系的意味是不完全相同的。一个dialog永远是一个独立的窗口,但是如果它拥有parent,则默认在parent之上居中显示。

    当用户操作意味着要关闭窗口时,Qwidget::close() slot会被调用,该slot向对应的widget发送“close“event.我们可以重新实现QWidget::closeEvent(),来定制自己的相应操作。

    每个Qwidget都有一个windowModified属性,在窗口文档被修改时应该被设为True,否则被设为false。

    QString::arg() 函数将字符串中编号最低的"%n"用参数进行替换,并返回替换后的字符串。
   
    每个Action都可以拥有一个类型为QVariant的关联数据。
   
    Qt中的qobject_cast<T>() 机制对于动态库也可以正常工作



Section 5 Using Dialog

    modeless window——one that runs independently of any other windows in th application

    对于modeless dialog ,当其被弹出时,可能处于三种情况:

    A. 这是该对话框第一次被激活
    B. 该对话框之前曾被激活,但用户又将其关闭
    C. 该对话框之前曾被激活,而且仍可见

    show() 将一个hidden window 变为visible,而activateWIndow()则将window的状态变为active

    model window——pops up when invoked and blocks the application,preventing any other processing or interactions until it is closed.

    一个dialog若是用show()来激活,则是modeless dialog;若通过exec()来激活,则是model dialog。此外,还可以调用setModel()来设置dialog的显式模式。

    QDialog::exec() 在dialog被确认时返回值为true,否则为false。

    在栈上创建 model dialog是一种良好的编程惯例,因为在使用完后就不再需要,而model dialog会在作用域结束后自动被销毁。

    由于多数应用程序的About box 都是高度雷同的,Qt中提供了一个方便的方案(static convenicence function):
   
    QMessage::about(),该函数于QMessageBox::warning()很相似。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值