PyQt学习笔记01-Qt基本概念进阶篇之窗口布局,对话框

来源:互联网 发布:软件开发专业大学排名 编辑:程序博客网 时间:2024/04/30 15:44

 Laying Out Widgets on a Form

      Qt提供的的基本的Layout Manager包括:QHBoxLayout,QVBoxLayout,QGridLayout和QStackLayout。

      Qt中其它能完成Layout management功能的类包括 QSplitter,QScrollArea,QMainWindow和QWorkspace。

      Qt中管理child widget的layout共有三种方式:absolute positioning, manual layout和layout managers。

      Absolute positioning:即由程序员通过hard-coded的形式管理child widget的位置和尺寸。

      Manual Layout:child widget的位置依然由程序员通过hard-coded的方式确定,而尺寸与父窗口的大小成一定比例,而不是完全的hard-coded。这种方式通过对form的resizeEvent()进行再实现来对child widget的定位。

      最重要的三个Layout Manger是QHBoxLayout,QVBoxLayout,QGridLayOut,他们都是派生自QLayout

      QGridLayout的使用略微有些复杂,它工作在一个由Cell组成的二维grid上。对于QGridLayout,为其添加widget的方式如下:

      layout-> addWidget(widget,row ,colum,rowSpan,columnSpan)

      其中widget为待添加的child widget, row和clomun确定该widget所占据空间中左上角那个Cell的位置坐标,rowSpan和columnSpan则指定widget的大小,这两个参数的的缺省值为1。

      addStretch()向Layout Manager中添加“占位符”。

      每个widget都有自己的size policy,由其告知layout 系统如何处理该widget外形上的stretch或是shrink。Qt中widget的size policy是通过QSizePolicy类来表示的。每个QSizePolicy由水平和竖直两组size policy组成,最常见的值包括:

      Fixed        Minimum        Maximum        Prefered        Expanding

      除了上述两组size policy外,QSizePolicy中还存储水平和竖直方向的stretch factor,该值用来表明在form尺寸扩展时widget随之扩展的比率。

QMainWindow

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

closeEvent()是由QWidget提供的一个虚函数,在用户关闭窗口时会被自动调用。因此如果要确认是否真正关闭窗口,可以重载这个函数,进行判断

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

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

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

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

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

        RESOURCES= spreadsheet.qrc

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

Events and signal

在slot函数里,可以用sender()函数知道,signal是哪个对象发送过来的。

Dialog

 modeless window--one that runs independently of any other windows in the application

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

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

      show() 将一个隐藏窗口变为可见,而activateWIndow()则将窗口的状态变为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()很相似。


另外学习了从QDialog继承下来的几个类的使用,包括QInputDialog,QColorDialog,QFontDialog,QFileDialog。 其中还学习了下QFrame这个类,已经setStyleSheet这个函数改变背景





0 0
原创粉丝点击