文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Qt 笔记 Chapter1-Chapter2

Qt 笔记 Chapter1-Chapter2

时间:2011-05-08  来源:曾经白云飞

Chapter 1: Getting Started

  • 几个命令
    // 创建了proj文件
    qmake -project
    // 创建makefile
    qmake hello.pro
    // 创建vs版本
    qmake -tp vc hello.pro
    // 然后在vs中编译
    

Chapter 2: Creating Dialogs

  1. 对话框程序一般用于设置程序的选项和选择.
  2. 类中 Q_OBJECT 宏表示要定义singnal和slot, signal和slot都是宏
  3. Qt::CaseSensitivity 为枚举类型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的灵敏度
  4. Qt最重要的模块为 QtCore, QtGui, QtNetwork, QtOpenGL, QtScript, QtSql, QtSvg, QtXml
  5. 在比较大的程序中, 头文件中包含其他的大头文件, 不是合适的做法, 所以在头文件中不要include QtGui
  6. tr函数可以用于转换该字符串至其他语言.
  7. label文本中的快捷键如&w,则按下alt+w则该label的buddy widget获得焦点.
  8. addStretch 就像在该处增加了弹簧一样显示空白
  9. slot和普通的C++成员函数相同, 可以是虚拟的, 可以被重载, 可以为公有, 保护或者私有函数. 可以直接调用该函数. 参数可以为任何类型. 唯一不同的就是当信号发出的时候就会自动调用该slot函数
  10. signal和slot
    • 一个signal可以连接多个slot
    • 多个signal可以连接一个slot
    • 一个signal可以连接另一个signal
      // 当第一个信号发出的时候, 就会发出第二个信号
      connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));
      
    • 可以移除连接
      disconnect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()));
      
    • signal和slot必须含有相同的参数和次序. 如果signal的参数多于slot的参数数, 多余的参数则会抛弃.
    • 在connect中, 参数不要写出名称, 只需写出类型即可.
    • signal和slot在QObject中实现, 不仅仅局限于GUI程序. 可以为任意QObject派生类所使用.
  11. Qt的Meta-Object系统
    • 该系统提供了两个关键服务: signals-slots 和 introspection(反省), introspection的功能是实现signals-slots的必要部分.
    • 同时允许应用程序员在运行时期得到关于QObject派生类的"meta-information", 其包含该对象支持的signals和slots列表以及类名称.
    • 该机制支持属性(Designer扩展的)和文本翻译(国际化), 并且为QtScript模块的基础, 可动态添加属性.
    • Qt通过提供分离的工具moc来实现该meta-object系统.
    • 该机制的作用如下:
      • Q_OBJECT宏声明一些introspection函数, 这些函数必须在每个QObject派生类中实现: metaObject(), tr(), qt_metacall(),以及其他
      • moc工具生成Q_OBJECT所声明函数和所有信号的实现
      • QObject的成员函数如connect和disconncet使用这些introspection函数来完成工作.
  12. 注意避免signal和slot的无限循环问题
  13. 无论是手写代码还是用Qt designer, 创建对话框都拥有以下相同的基本步骤:
    • 创建和初始化子widget
    • 将子widget放入layout中
    • 设置tab次序
    • 建立signal-slot连接
    • 实现对话框自定义slot
  14. ui文件生成的c++文件里所生成的UI类, 声明了该form所有子widget和layout的成员变量. setupUi()函数初始化该form.
  15. 为了增加一些功能, 创建一个新类, 从QDialog和Ui::GoToCellDialog派生. 然后实现缺省的功能
  16. Qt提供了三个内建的validator类: QIntValidator, QDoubleValidator, 和 QRegExpValidator
    • QRegExpValidator 可以设置其父对象, 这样就无需担心删除问题, 因为父对象的删除就必然要删除其子对象, 并在屏幕删除该对象
  17. slot accept()函数将dialog的返回值设置为QDialog::Accepted()(等于1). reject则设置返回值为QDialog::Rejected()(等于0)
  18. QLineEdit::hasAcceptableInput() 用验证器验证输入内容是否符合要求
  19. QDialogButtonBox --- 一个widget, 含有指定的按钮并使用正确的方式显示, 拖动Button Box widget至form
    buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
    
  20. 最常用的变形对话框为扩展对话框和多页面对话框.
  21. 相同的widget由于其内容不同, 则大小有可能不同, 如需设置相同大小则需要增加代码:
    primaryColumnCombo->setMinimumSize(secondaryColumnCombo->sizeHint());
    // secondaryColumnCombo的内容为None, 比PrimaryColumnCombo的内容要多, 所以重新设置
    
  22. 多页面对话框
    • QTabWidget --- 提供tab bar控制其内置的QStackedWidget
    • QListWidget 和 QStackedWidget 配合使用, QListWidget的当前条目显示哪个QStackedWidget显示
      • QListWidget::currentRowChanged() 信号连至 QStackedWidget::setCurrentIndex() 槽
    • QTreeWidget 和 QStackedWidget 类似QListWidget
  23. 动态对话框
    • 是指用Qt Designer创建的.ui文件在运行期间创建的对话框. 而不是用.ui文件生成的C++代码创建的对话框.
    • 我们可以在运行期间使用QUiLoader类加载ui文件
      QUiLoader uiLoader;
      QFile file("sortdialog.ui");
      QWidget *sortDialog = uiLoader.load(&file);
      if (sortDialog) {
              ...
      }
      
    • 我们可以使用QObject::findChild<T>()访问该form的子widget
      QComboBox *primaryColumnCombo =
              sortDialog->findChild<QComboBox *>("primaryColumnCombo");
      if (primaryColumnCombo) {
              ...
      }
      
    • QUiLoader 位于特定的库里, 需要增加配置: CONFIG += uitools
  24. 内置的widget和对话框类
    • 按钮: QPushButton, QToolButton, QCheckBox, QRadioButton
    • 单页容器: QGroupBox, QFrame
    • 多页容器: QTabWidget, QToolBox
    • 显示条目: QListView, QTreeView, QTabView
    • 显示: QLabel, QLCDNumber, QProgress, QTextBrowser
    • 输入: QSpinBox, QDoubleSpinBox, QComboBox, QDateEdit, QTimeEdit, QDateTimeEdit, QScrollBar, QSlider, QTextEdit, QLineEdit, QDial
    • 反馈对话框: QInputDialog, QProgressDialog, QMessageBox, QErrorMessage
    • 颜色和字体对话框: QColorDialog, QFontDialog
    • 文件和打印对话框: QPageSetupDialog, QFileDialog, QPrintDialog
  25. 滚动条QScrollBar的基类为 QAbstractScrollArea
  26. Qt提供富文本(rich text), 支持多格式文本
  27. QLabel支持纯文本, HTML, 图像
  28. QTextBrowser为只读QTextEdit, 可支持带格式文本, 相对于QLabel, 可以用于显示大量的文本内容, 提供滚动条, 键盘和鼠标可以控制浏览.
  29. QLineEditor支持validator, QTextEditor为QAbstractScrollArea的派生类, 可以输入大量的文本. 可以设置输入纯文本还是富文本(rich text)
  30. QLineEditor和QTextEditor都和剪贴板相关联
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载