Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5800611
  • 博文数量: 409
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 8273
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 19:15
个人简介

qq:78080458 学习交流群:150633458

文章分类

全部博文(409)

文章存档

2019年(127)

2018年(130)

2016年(20)

2015年(60)

2014年(41)

2013年(31)

分类: 嵌入式

2015-11-12 20:08:12

一、QWidget子类
    QWidget类是所有用户界面的基类,我们经常用的一些构成界面的类都是继承自它,例如QPushButton、QLabel等等
    QWidget实现的功能就是将窗口部件显示到屏幕上,而要创建一个复杂的窗口,就必须实现它的子类。如果我们单独的实现一个QWidget类,那么你将看到一个没有任何功能的窗口

1、基础窗口部件
    1)QAbstractButton的子类(按钮)
        QCheckBox 复选框
        QPushButton 按钮
        QRadioButton 单选
        QToolButton 快速存取
    2)QAbstractSlider的子类(范围)
        QDial 圆形范围
        QScrollBar 滚动条
        QSlider  滑块
    3)QAbstractSpinBox的子类(显示数值)
        QDateTimeEdit 编辑日期和时间
        QDateEdit 编辑日期
        QDoubleSpinBox 可以上下调节数值
        QSpinBox 
    4)QFram的子类
        QLabel 标签
        QToolBox 列标签
        QSpplitter 分离器
        QMenu 菜单
        QProgressBar 进度条
    5)直接继承QWidget的类
        QDialog
        QMainWindow
2、复杂窗口部件
    QCalenderWidget 日历控件
    QTabblelView表视图 
    QListView 列表视图
    QTreeView 树视图
    QWebView   web视图

二、QMainWindow类
Qt的QMainWindow类提供了一个应用程序的主窗口,包括一个菜单栏、多个工具栏、多个锚接部件、一个状态栏、以及一个中心部件
1、菜单栏
    1)菜单栏是按照程序功能排列的按钮的集合,在标题栏的下面。
    2)菜单栏包含文件、查看、编辑等多个菜单
    3)菜单栏内部是一系列命令。在Qt中为了使菜单项和工具栏的命令有一致性,使用action来表示这些命令。因此Qt菜单就是用一系列QAction对象构成的列表,菜单栏包含一系列的菜单
    4)一个Qt程序只能有一个菜单栏
2、工具栏
    1)工具栏是一系列类似于按钮的动作排列成的面板,由一些经常使用的动作组成
    2)工具栏位于菜单栏的下面,状态栏的上面。工具栏可以停靠在主窗口的上、下、左、右4个方向。
    3)一个主窗口可以包含多个工具栏
3、锚接部件
    1)锚接部件一般多为一个容器来使用,以包容其他窗口部件来实现功能
    2)对于一个标准的Qt主窗口而言,锚接部件并不是必须的。
    3)锚接部件可以作为一个窗口浮动在主窗口的上面,也可以像工具栏一样停靠在主窗口的上、下、左、右4个方向
    4)一个主窗口可以包含多个锚接部件
4、状态栏
    1)状态栏是包含文本输出窗格或者“指示器”的控制条
    2)状态栏位于每个窗口的最底端
    3)状态栏可以添加Qt窗口部件
    4)一个主窗口最多只有一个状态栏
5、中心部件
主窗口的中心,一个主窗口只有一个中心部件。主窗口有自己的布局管理器,因此不能再给主窗口设置布局,但是可以给中心部件设置布局


三、创建主窗口
纯代码创建
1、头文件
    头文件中应该具备的资源:
    菜单栏:QMenu *fileMenu, *editMenu, *helpMenu 
    工具栏:QToolBar *fileToolBar, *editToolBar
    状态栏:QStatusBar
    中心部件
    锚接部件 dock

    动作:QAction *openAction, *newAction, *saveAction, *exitAction
    动作:QAction *copyAction, *cutAction, *pasteAction, 
    动作:QAction *aboutAction

    槽函数:openSlot(), saveSlot(), newSlot(), aboutSlot()
    私有函数:
      void createActions()
      void createMenus()
      void createToolBar();
      void setStatusBar();
2、资源文件
    application.qrc

  images/open.png
  images/copy.png
  images/cut.png
  images/paste.png


3、createAction
    //创建动作
    openAction = new QAction( QIcon(":/images/open.png"),
     tr("打开"), //防止乱码
     this
     );
    //设置快捷键
    1)openAction->setShortcuts(QKeySequence::Open)
    2)openAction->setShortcut(QKeySequence(tr("Ctrl+o")))
    3)openAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O))
    //设置状态栏信息
    openAction->setStatusTip(tr("打开"))
    //关联信号和槽函数
    connect(openAction, SIGNAL(triggered()), this, SLOT(openSlot()))

    4、createrMenus
    menuBar()可以获得菜单栏的指针
    //添加菜单
    fileMenu = menuBar()->addMenu(tr("文件"));
    //为菜单添加活动
    fileMenu->addAction(openAction);
    //添加分割线
    menuBar()->addSeparator();

    5、createrToolBar
    QMainWindow::addToolBar()函数可以创建工具栏
    //添加工具栏
    fileToolBar = addToolBar(tr("文件"))
    //给工具栏添加动作
    fileToolBar->addAction(openAction)

    6、statusBar
    statusBar()函数可以获取状态栏的指针
    statusBar()->showMessage(tr("准备"));

    7、中心部件
    setCentralWidget(textEdit)

    8、锚接部件
    锚接窗口简单的说就是一个可以“四处移动”的活动窗口
    工具栏是锚接窗口的子类,所以一切适用于锚接窗口的函数都适用于工具栏

    用户可以将锚接窗口摆放在锚接区域的任意有效位置,可以在代码中指定锚接窗口所处的位置:


    添加锚接窗口:
    //创建锚接窗口
    QDockWidget dock = new QDockWidget(tr("name"), this)
    //向锚接窗口里面添加控件
    dock->setWidget(textEdit)
    //将锚接窗口加载到主窗口
    addDockWidget(Qt::LeftDockWidgetArea, dock)
    //也可以将锚接部件移除
    removeDockWidget(dock);
    

四、源代码
资源文件

点击(此处)折叠或打开

  1. <!DOCTYPE RCC><RCC version="1.0">
  2. <qresource>
  3.     <file>images/open.png</file>
  4.     <file>images/copy.png</file>
  5.     <file>images/cut.png</file>
  6.     <file>images/paste.png</file>
  7. </qresource>
  8. </RCC>
头文件

点击(此处)折叠或打开

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H

  3. #include <QtGui>
  4. class mainWindow : public QMainWindow
  5. {
  6. Q_OBJECT
  7. public:
  8.     mainWindow();
  9. private slots:
  10.     void openSlot();
  11.     void saveSlot();
  12.     void exitSlot();

  13. private:
  14.     QMenu *fileMenu;
  15.     QMenu *editMenu;
  16.     QMenu *helpMenu;

  17.     QToolBar *fileToolBar, *editToolBar;

  18.     QTextEdit *textEdit, *text;

  19.     QAction *openAct, *saveAct, *exitAct;
  20.     QAction *cutAct, *copyAct, *pasteAct;
  21.     QAction *aboutAct;

  22.     QDockWidget *dock;

  23.     void createActions();
  24.     void createMenus();
  25.     void createToolBar();
  26.     void setStatusBar();
  27.     void createDockWidget();


  28. };

  29. #endif
mainWindow.cpp

点击(此处)折叠或打开

  1. #include "mainWindow.h"

  2. mainWindow::mainWindow()
  3. {
  4.     setWindowTitle("haha");
  5.     textEdit = new QTextEdit();
  6.     //设置中心部件
  7.     setCentralWidget(textEdit);
  8.     //创建动作
  9.     createActions();
  10.     //创建菜单
  11.     createMenus();
  12.     //创建工具条
  13.     createToolBar();
  14.     //设置状态栏
  15.     setStatusBar();
  16.     //创建锚接部件
  17.     createDockWidget();
  18. }

  19. void mainWindow::openSlot()
  20. {

  21. }
  22. void mainWindow::saveSlot()
  23. {

  24. }
  25. void mainWindow::exitSlot()
  26. {

  27. }

  28. void mainWindow::createActions()
  29. {
  30.     //创建QAction(资源,名字,父窗口)
  31.     openAct = new QAction(QIcon(":/images/open.png"), tr("打开"), this);
  32.     //快捷键
  33.     openAct->setShortcut(QKeySequence(tr("ctrl+o")));
  34.     //设置状态栏提示
  35.     openAct->setStatusTip(tr("打开文件"));
  36.     //关联信号和槽函数
  37.     connect(openAct,SIGNAL(triggered()), this, SLOT(openSlot()));

  38. }
  39. void mainWindow::createMenus()
  40. {
  41.     //添加菜单
  42.     fileMenu = menuBar()->addMenu(tr("文件"));
  43.     //为菜单添加动作
  44.     fileMenu->addAction(openAct);
  45. }
  46. void mainWindow::createToolBar()
  47. {
  48.     //添加工具栏
  49.     fileToolBar = addToolBar(tr("文件"));
  50.     //为工具栏添加动作
  51.     fileToolBar->addAction(openAct);
  52. }
  53. void mainWindow::setStatusBar()
  54. {
  55.     //设置状态栏信息
  56.     statusBar()->showMessage(tr("准备"));
  57. }
  58. void mainWindow::createDockWidget()
  59. {
  60.     //创建锚接部件
  61.     dock = new QDockWidget(tr("锚接窗口"), this);
  62.     //向锚接部件添加控件
  63.     text = new QTextEdit();
  64.     dock->setWidget(text);
  65.     //将锚接部件加到主窗口
  66.     addDockWidget(Qt::RightDockWidgetArea, dock);
  67. }
main.cpp

点击(此处)折叠或打开

  1. #include "mainWindow.h"
  2. #include <QApplication>

  3. int main(int argc, char *argv[])
  4. {
  5.     //设置编码,防止汉字出现乱码
  6.     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
  7.     QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
  8.     QApplication app(argc, argv);

  9.     mainWindow win;
  10.     win.show();

  11.     return app.exec();
  12. }
结果








 









 












阅读(4520) | 评论(0) | 转发(0) |
0

上一篇:lesson3-Qt对话框

下一篇:lesson5-文件布局

给主人留下些什么吧!~~