嵌入式学习-QT-Day06

打印 上一主题 下一主题

主题 759|帖子 759|积分 2277

嵌入式学习-QT-Day06
  六、多窗口编程
  1、QMessageBox 消息对话框
  2、QWidget类
  3、parent参数
  4、堆栈窗口(QStackedWidget)
  5、新建自界说窗口类
  6、对象传值
  6.1 父对象 → 子对象
  6.2 子对象 → 父对象
  7、事件机制
  8、QMainWindow主窗口类
  8.1 QMenuBar 菜单栏
  8.2 QToolBar 工具栏
  8.3 QStatusBar状态栏
       六、多窗口编程

   1、QMessageBox 消息对话框

   QMessageBox继续自QDialog。显式一个模态对话框,用于用户前台信息关照或者询问用户问题,并接收问题答案。

   QDialog的Qt源码中,派生类往往都是一些在特定场合下使用的预设好的对话框窗口,这些窗口的使用无需创建对象,直接使用静态成员函数弹窗,使用函数的返回值作为这个窗口的效果。
  
  1. // QMessageBox的弹窗函数
  2. // 参数1:parent参数
  3. // 参数2:窗口标题
  4. // 参数3:信息内容,窗口展示的信息
  5. // 返回值:用户点击的按钮类型
  6. StandardButton        critical(QWidget * parent, const QString & title, const QString & text)
  7. StandardButton        information(QWidget * parent, const QString & title, const QString & text)
  8. StandardButton        question(QWidget * parent, const QString & title, const QString & text)
  9. StandardButton        warning(QWidget * parent, const QString & title, const QString & text)
  10. [static]
复制代码
  

   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include <QMessageBox>
  5. #include <QButtonGroup>
  6. namespace Ui {
  7. class Dialog;
  8. }
  9. class Dialog : public QDialog
  10. {
  11.     Q_OBJECT
  12. public:
  13.     explicit Dialog(QWidget *parent = 0);
  14.     ~Dialog();
  15. private:
  16.     Ui::Dialog *ui;
  17. private:
  18.     QButtonGroup *btp;
  19. private slots:
  20.     void buttonClickedSlot(int);
  21. };
  22. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     btp = new QButtonGroup(this);
  9.     btp->addButton(ui->pushButtonQ,1);
  10.     btp->addButton(ui->pushButtonI,2);
  11.     btp->addButton(ui->pushButtonW,3);
  12.     btp->addButton(ui->pushButtonC,4);
  13.     connect(btp,SIGNAL(buttonClicked(int)),
  14.             this,SLOT(buttonClickedSlot(int)));
  15. }
  16. Dialog::~Dialog()
  17. {
  18.     delete btp;
  19.     delete ui;
  20. }
  21. void Dialog::buttonClickedSlot(int id)
  22. {
  23.     if(id == 1)
  24.     {
  25.         // 设置弹窗
  26.         QMessageBox::StandardButton stdb = QMessageBox::question(this,"question","是否需要关闭?");
  27.         if(stdb == QMessageBox::Yes)
  28.         {
  29.             close();
  30.         }
  31.         else if(stdb == QMessageBox::No)
  32.         {
  33.         }
  34.     }
  35.     else if(id == 2)
  36.     {
  37.         QMessageBox::information(this,"information","已加载完成!!!!");
  38.     }
  39.     else if(id == 3)
  40.     {
  41.         QMessageBox::warning(this,"warning","您的输入有误!!!");
  42.     }
  43.     else if(id == 4)
  44.     {
  45.         QMessageBox::critical(this,"critical","程序异常,缺少必要文件!!");
  46.     }
  47.     else
  48.     {
  49.     }
  50. }
复制代码
  2、QWidget类

   QWidget类是所有窗口和组件的基类,之前熟悉此类更多是站在组件的角度,现实上QWidget身为所有窗口的基类,本身也具有许多窗口的特性,窗口类的继续布局如下所示:
   

   新建一个项目,使自带的窗口类继续QWidget。
   

   创建完成后运行时发现,与dialog的窗口并无太大区别。表面区别有:
   

  
  1. #include "widget.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication a(argc, argv);
  6.    
  7.     // 当QWidget类的构造函数parent参数使用默认值0时,表示创建的是独立窗口
  8.     // 当QWidget类的构造函数parent参数传递参数时,新创建的QWidget类对象会成为子窗口(内嵌窗口)
  9.     Widget w;
  10.     w.show();
  11.     return a.exec();
  12. }
复制代码
  QWidget类作为所有窗口的基类,内部也规定了许多窗口特性:
   

  • windowTitle : QString
   

   

  • windowFlags : Qt::WindowFlags(窗口标志)
   

   使用setter函数设置多个窗口标志,使用 | 分割(多个窗口标志之间可能会出现冲突)。实现窗口置于最上层、且没有边框。
   

   
   设置窗口状态:
   
  
  1. // 设置窗口状态
  2. // 参数为窗口状态
  3. void QWidget::​setWindowState(Qt::WindowStates windowState)
复制代码
  
   

   

   3、parent参数

   目前对parent参数的理解有以下几点:
   

  • parent参数表现子组件位于那个窗口中。
  • parent参数还决定了QWidget对象是独立窗口照旧内嵌窗口
   现实上parent参数还表现Qt的内存接纳机制,如果对象a作为对象b的构造函数的parent参数时,表现对象a是对象b的父对象,这是一种内存接纳的依靠关系,即对象b跟随对象a一并销毁。此时无需手动控制对象b的销毁过程(手动调用delete)。
   如果堆内存对象创建时不通报parent参数,表现对对象调用必要步调员手动delete。
   这样做也有缺点,缺点就是内存占用,主窗口还存在时,子窗口内存不会被开释掉。
   

   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include <QDebug>
  5. namespace Ui {
  6. class Dialog;
  7. }
  8. class Dialog : public QDialog
  9. {
  10.     Q_OBJECT
  11. public:
  12.     explicit Dialog(QWidget *parent = 0);
  13.     ~Dialog();
  14. private:
  15.     Ui::Dialog *ui;
  16. private slots:
  17.     void buttonClickedSlot();
  18.     void buttonThisClickedSlot();
  19. };
  20. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     connect(ui->pushButton,SIGNAL(clicked()),
  9.             this,SLOT(buttonClickedSlot()));
  10.     connect(ui->pushButtonThis,SIGNAL(clicked()),
  11.             this,SLOT(buttonThisClickedSlot()));
  12. }
  13. Dialog::~Dialog()
  14. {
  15.     qDebug() << "析构函数";
  16.     delete ui;
  17. }
  18. void Dialog::buttonClickedSlot()
  19. {
  20.     Dialog *dlg = new Dialog;
  21.     dlg->show();
  22. }
  23. void Dialog::buttonThisClickedSlot()
  24. {
  25.     Dialog *dlg = new Dialog(this);
  26.     dlg->show();
  27. }
复制代码
  4、堆栈窗口(QStackedWidget)

   通常作为独立窗口的内嵌窗口(组件),并于QListWidget举行联动。
   

   

   dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     // 连接信号槽
  9.     connect(ui->listWidget,SIGNAL(currentRowChanged(int)),
  10.             ui->stackedWidget,SLOT(setCurrentIndex(int)));
  11. }
  12. Dialog::~Dialog()
  13. {
  14.     delete ui;
  15. }
复制代码
  5、新建自界说窗口类

   在一个项目中新建一个Qt的窗口界面类,操纵步骤如下:
   

  • 在QtCreator中选中项目名称,鼠标右键,点击添加新文件。
  • 在弹出的窗口中,按照下图所示举行操纵。
   

   在弹出的窗口中选择界面模板后,点击“下一步”
   

   在弹出的窗口,输入类名(注意帕斯卡命名法/大驼峰命名法)然后点击下一步。
   

   在项目管理界面点击完成,可以看到新的窗口类文件就已经添加到项目中了。
   

   ui格式如下:
   

   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include "mydialog.h"
  5. namespace Ui {
  6. class Dialog;
  7. }
  8. class Dialog : public QDialog
  9. {
  10.     Q_OBJECT
  11. public:
  12.     explicit Dialog(QWidget *parent = 0);
  13.     ~Dialog();
  14. private:
  15.     Ui::Dialog *ui;
  16. private slots:
  17.     void btnClickedSlot();
  18. };
  19. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     connect(ui->pushButton,SIGNAL(clicked()),
  9.             this,SLOT(btnClickedSlot()));
  10. }
  11. Dialog::~Dialog()
  12. {
  13.     delete ui;
  14. }
  15. void Dialog::btnClickedSlot()
  16. {
  17.     MyDialog *mydlg = new MyDialog(this);
  18.     mydlg->show();
  19. }
复制代码
  6、对象传值

   6.1 父对象 → 子对象

   此处指的是Qt的parent参数的依靠关系,并非继续关系。后文同。
   【需求】转动左边球,右边球跟着转。
   这种环境下最佳的办理方案是使用C++的成员函数传参。
   

   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include "mydialog.h"
  5. namespace Ui {
  6. class Dialog;
  7. }
  8. class Dialog : public QDialog
  9. {
  10.     Q_OBJECT
  11. public:
  12.     explicit Dialog(QWidget *parent = 0);
  13.     ~Dialog();
  14. private:
  15.     Ui::Dialog *ui;
  16.     MyDialog *mydlg;
  17. private slots:
  18.     void btnClickedSlot();
  19.     void valueChangedSlot(int);
  20. };
  21. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     connect(ui->pushButton,SIGNAL(clicked()),
  9.             this,SLOT(btnClickedSlot()));
  10. }
  11. Dialog::~Dialog()
  12. {
  13.     delete ui;
  14. }
  15. void Dialog::btnClickedSlot()
  16. {
  17.     mydlg = new MyDialog(this);
  18.     mydlg->show();
  19.     connect(ui->dial,SIGNAL(valueChanged(int)),
  20.             this,SLOT(valueChangedSlot(int)));
  21. }
  22. void Dialog::valueChangedSlot(int value)
  23. {
  24.     mydlg->setDialValue(value);
  25. }
复制代码
  mydialog.h
  
  1. #ifndef MYDIALOG_H
  2. #define MYDIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class MyDialog;
  6. }
  7. class MyDialog : public QDialog
  8. {
  9.     Q_OBJECT
  10. public:
  11.     explicit MyDialog(QWidget *parent = 0);
  12.     ~MyDialog();
  13.     void setDialValue(int value);
  14. private:
  15.     Ui::MyDialog *ui;
  16. };
  17. #endif // MYDIALOG_H
复制代码
  myDialog.cpp
  
  1. #include "mydialog.h"
  2. #include "ui_mydialog.h"
  3. MyDialog::MyDialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::MyDialog)
  6. {
  7.     ui->setupUi(this);
  8. }
  9. MyDialog::~MyDialog()
  10. {
  11.     delete ui;
  12. }
  13. void MyDialog::setDialValue(int value)
  14. {
  15.     ui->dial->setValue(value);
  16. }
复制代码
  6.2 子对象 → 父对象

   此处指的是Qt的parent参数的依靠关系,并非继续关系。
   【需求】转动子窗口的球,父窗口的球跟着转。
   这种环境最佳的办理方案是信号槽传参,子对象发射带参数的信号函数,父对象使用带参数的槽函数接收。
   

   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include "mydialog.h"
  5. namespace Ui {
  6. class Dialog;
  7. }
  8. class Dialog : public QDialog
  9. {
  10.     Q_OBJECT
  11. public:
  12.     explicit Dialog(QWidget *parent = 0);
  13.     ~Dialog();
  14. private:
  15.     Ui::Dialog *ui;
  16.     MyDialog *mydlg;
  17. private slots:
  18.     void btnClickedSlot();
  19.     void valueChangedSlot(int);
  20.     void valueDialogSlot(int);
  21. };
  22. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8.     connect(ui->pushButton,SIGNAL(clicked()),
  9.             this,SLOT(btnClickedSlot()));
  10. }
  11. Dialog::~Dialog()
  12. {
  13.     delete ui;
  14. }
  15. void Dialog::btnClickedSlot()
  16. {
  17.     mydlg = new MyDialog(this);
  18.     mydlg->show();
  19.     connect(ui->dial,SIGNAL(valueChanged(int)),
  20.             this,SLOT(valueChangedSlot(int)));
  21.     connect(mydlg,SIGNAL(valueSignal(int)),
  22.             this,SLOT(valueDialogSlot(int)));
  23. }
  24. void Dialog::valueChangedSlot(int value)
  25. {
  26.     mydlg->setDialValue(value);
  27. }
  28. void Dialog::valueDialogSlot(int value)
  29. {
  30.     ui->dial->setValue(value);
  31. }
复制代码
  myDialog.h
  
  1. #ifndef MYDIALOG_H
  2. #define MYDIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class MyDialog;
  6. }
  7. class MyDialog : public QDialog
  8. {
  9.     Q_OBJECT
  10. public:
  11.     explicit MyDialog(QWidget *parent = 0);
  12.     ~MyDialog();
  13.     void setDialValue(int value);
  14. private:
  15.     Ui::MyDialog *ui;
  16. signals:
  17.     void valueSignal(int);  // 声明带参数的自定义信号
  18. private slots:
  19.     void valueChangedSlot(int);
  20. };
  21. #endif // MYDIALOG_H
复制代码
  myDialog.cpp
  
  1. #include "mydialog.h"
  2. #include "ui_mydialog.h"
  3. MyDialog::MyDialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::MyDialog)
  6. {
  7.     ui->setupUi(this);
  8.     connect(ui->dial,SIGNAL(valueChanged(int)),
  9.             this,SLOT(valueChangedSlot(int)));
  10. }
  11. MyDialog::~MyDialog()
  12. {
  13.     delete ui;
  14. }
  15. void MyDialog::setDialValue(int value)
  16. {
  17.     ui->dial->setValue(value);
  18. }
  19. void MyDialog::valueChangedSlot(int value)
  20. {
  21.     // 发射带参数的信号函数
  22.     emit valueSignal(value);
  23. }
复制代码
  7、事件机制

   事件是Qt的一种底层机制,经过层层筛选,步调员可以在通报的层级中检测或者处置惩罚这些事件。

   本次学习主要在窗口类中实现事件函数,从而检测到事件的通报。利用事件的触发机制,从而实现一些特定的效果。事件函数浩繁,包罗但不限于:
  
  1. // 绘制事件
  2. void QWidget::paintEvent(QPaintEvent * event) [virtual protected]
  3. // 大小改变事件
  4. void QWidget::resizeEvent(QResizeEvent * event) [virtual protected]
  5. // 鼠标按压事件
  6. void QWidget::mousePressEvent(QMouseEvent * event) [virtual protected]
  7. // 鼠标释放事件
  8. void QWidget::mouseReleaseEvent(QMouseEvent * event) [virtual protected]
  9. // 鼠标双击事件
  10. void QWidget::mouseDoubleClickEvent(QMouseEvent * event) [virtual protected]
  11. // 鼠标移动事件
  12. void QWidget::mouseMoveEvent(QMouseEvent * event) [virtual protected]
  13. // 移动事件
  14. void QWidget::moveEvent(QMoveEvent * event) [virtual protected]
  15. // 按键按压事件
  16. void QWidget::keyPressEvent(QKeyEvent * event) [virtual protected]
  17. // 按键释放事件
  18. void QWidget::keyReleaseEvent(QKeyEvent * event) [virtual protected]
  19. // 获取焦点事件
  20. void QWidget::focusInEvent(QFocusEvent * event) [virtual protected]
  21. // 失去焦点事件
  22. void QWidget::focusOutEvent(QFocusEvent * event) [virtual protected]
  23. // 关闭事件
  24. void QWidget::closeEvent(QCloseEvent * event) [virtual protected]
  25. // 鼠标进入事件
  26. void QWidget::enterEvent(QEvent * event) [virtual protected]
  27. // 鼠标离开事件
  28. void QWidget::leaveEvent(QEvent * event) [virtual protected]
复制代码
  事件函数的基础使用只必要在对应的类中覆盖基类的事件函数即可。事件函数的参数就是包含了当前事件数据的对象。
   绘制事件:
   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include <QPainter> // 画家类
  5. #include <QPixmap>
  6. #include <QDebug>
  7. namespace Ui {
  8. class Dialog;
  9. }
  10. class Dialog : public QDialog
  11. {
  12.     Q_OBJECT
  13. public:
  14.     explicit Dialog(QWidget *parent = 0);
  15.     ~Dialog();
  16. private:
  17.     Ui::Dialog *ui;
  18.     void paintEvent(QPaintEvent * event);
  19. };
  20. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8. }
  9. Dialog::~Dialog()
  10. {
  11.     delete ui;
  12. }
  13. void Dialog::paintEvent(QPaintEvent *event)
  14. {
  15.     // 创建画家类对象
  16.     // 参数为 QPaintDevice *表示可绘制的对象
  17.     QPainter painter(this);
  18.     QPixmap map(":/new/prefix1/meinv.png");
  19.     // 绘制图片
  20.     // 参数1:横轴坐标
  21.     // 参数2:纵轴坐标
  22.     // 参数3:绘制宽度
  23.     // 参数4:绘制高度
  24.     // 参数5:绘制内容
  25.     painter.drawPixmap(0,0,this->width(),this->height(),map);
  26.     qDebug() << this->width() << this->height();
  27.     qDebug() << this->x() << this->y();
  28. }
复制代码
  【案例】按下键盘A、D、W、S键控制进度条加或者减
   dialog.h
  
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. #include <QPainter> // 画家类
  5. #include <QPixmap>
  6. #include <QDebug>
  7. #include <QKeyEvent>
  8. namespace Ui {
  9. class Dialog;
  10. }
  11. class Dialog : public QDialog
  12. {
  13.     Q_OBJECT
  14. public:
  15.     explicit Dialog(QWidget *parent = 0);
  16.     ~Dialog();
  17. private:
  18.     Ui::Dialog *ui;
  19.     void paintEvent(QPaintEvent * event);
  20.     void keyPressEvent(QKeyEvent * event);
  21. };
  22. #endif // DIALOG_H
复制代码
  dialog.cpp
  
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4.     QDialog(parent),
  5.     ui(new Ui::Dialog)
  6. {
  7.     ui->setupUi(this);
  8. }
  9. Dialog::~Dialog()
  10. {
  11.     delete ui;
  12. }
  13. void Dialog::paintEvent(QPaintEvent *event)
  14. {
  15.     // 创建画家类对象
  16.     // 参数为 QPaintDevice *表示可绘制的对象
  17.     QPainter painter(this);
  18.     QPixmap map(":/new/prefix1/meinv.png");
  19.     // 绘制图片
  20.     // 参数1:横轴坐标
  21.     // 参数2:纵轴坐标
  22.     // 参数3:绘制宽度
  23.     // 参数4:绘制高度
  24.     // 参数5:绘制内容
  25.     painter.drawPixmap(0,0,this->width(),this->height(),map);
  26.     qDebug() << this->width() << this->height();
  27.     qDebug() << this->x() << this->y();
  28. }
  29. void Dialog::keyPressEvent(QKeyEvent *event){    if(event->key() == Qt::Key_A)  // 如果按键是A    {        int value = ui->progressBar->value();        ui->progressBar->setValue(--value);    }    else if(event->key() == Qt::Key_D)    {        int value = ui->progressBar->value();        ui->progressBar->setValue(++value);    }    else if(event->key() == Qt::Key_W)    {        ui->progressBar->setValue(100);    }    else if(event->key() == Qt::Key_S)    {        ui->progressBar->setValue(0);    }    else    {    }}
复制代码
  8、QMainWindow主窗口类

   QMainWindow是最适互助为主窗口的类型,因为其中包含了多个构成部分:
   

   8.1 QMenuBar 菜单栏

   菜单栏的构成如下所示:
   

   菜单栏的构建可以通过Designer,也可以通过C++代码实现,但是不要混用。
  
  1. // 向菜单栏中添加一级菜单
  2. // 参数为菜单的文字
  3. // 返回值是添加的菜单对象
  4. QMenu * QMenuBar::​addMenu(const QString & title)
复制代码
  1. // 向菜单中添加动作
  2. // 参数为菜单的文字
  3. // 返回值是添加的动作对象
  4. QAction * QMenu::​addAction(const QString & text)
复制代码
  QMainwindow.cpp
  
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8.     QMenu* menuFile = ui->menuBar->addMenu("文件");
  9.     QMenu* menuEdit = ui->menuBar->addMenu("编辑");
  10.     QMenu* menuHelp = ui->menuBar->addMenu("帮助");
  11.     // 向一级菜单中添加动作
  12.     QAction* actionNew = menuFile->addAction("新建");
  13.     QAction* actionSave = menuFile->addAction("保存");
  14.     QAction* actionOpen = menuFile->addAction("打开");
  15.     // 向一级菜单中添加二级菜单
  16.     QMenu* menuRecent = menuFile->addMenu("最近访问的文件");
  17.     // 向二级菜单中添加动作
  18.     QAction* actionCpp = menuRecent->addAction("hello.cpp");
  19.     QAction* actionH = menuRecent->addAction("hello.h");
  20. }
  21. MainWindow::~MainWindow()
  22. {
  23.     delete ui;
  24. }
复制代码
  

   

   mainwindow.h
  
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QMenu>
  5. namespace Ui {
  6. class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow
  9. {
  10.     Q_OBJECT
  11. public:
  12.     explicit MainWindow(QWidget *parent = 0);
  13.     ~MainWindow();
  14. private:
  15.     Ui::MainWindow *ui;
  16. private slots:
  17.     void actionNewTriggredSlot();
  18.     void actionCppTriggredSlot();
  19. };
  20. #endif // MAINWINDOW_H
复制代码
  mainwindow.cpp
  
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8. //    QMenu* menuFile = ui->menuBar->addMenu("文件");
  9. //    QMenu* menuEdit = ui->menuBar->addMenu("编辑");
  10. //    QMenu* menuHelp = ui->menuBar->addMenu("帮助");
  11. //    // 向一级菜单中添加动作
  12. //    QAction* actionNew = menuFile->addAction("新建");
  13. //    QAction* actionSave = menuFile->addAction("保存");
  14. //    QAction* actionOpen = menuFile->addAction("打开");
  15. //    // 向一级菜单中添加二级菜单
  16. //    QMenu* menuRecent = menuFile->addMenu("最近访问的文件");
  17. //    // 向二级菜单中添加动作
  18. //    QAction* actionCpp = menuRecent->addAction("hello.cpp");
  19. //    QAction* actionH = menuRecent->addAction("hello.h");
  20.     connect(ui->action_2,SIGNAL(triggered()),
  21.             this,SLOT(actionNewTriggredSlot()));
  22.     connect(ui->actionHello_cpp,SIGNAL(triggered()),
  23.             this,SLOT(actionCppTriggredSlot()));
  24. }
  25. MainWindow::~MainWindow()
  26. {
  27.     delete ui;
  28. }
  29. void MainWindow::actionNewTriggredSlot()
  30. {
  31.     ui->textBrowser->append("新建了一个文件");
  32. }
  33. void MainWindow::actionCppTriggredSlot()
  34. {
  35.     ui->textBrowser->append("打开了hello.cpp");
  36. }
复制代码
  8.2 QToolBar 工具栏

   工具栏按钮往往使用菜单栏中的QAction对象,但是必要给QAction设置图标。
   

   

   
   8.3 QStatusBar状态栏

   QStatusBar支持自界说样式,可以通过下面的函数添加组件。
  
  1. // 状态栏显式信息
  2. // 参数1:组件对象
  3. // 参数2:拉伸因子
  4. void QStatusBar::​addWidget(QWidget * widget, int stretch = 0)
复制代码
  

   

   
   普通使用可以通过下面槽函数举行显示和消除。
  
  1. // 在状态栏展示信息
  2. // 参数1:显示的信息内容
  3. // 参数2:信息显示的时间(单位毫秒),默认值0表示持续显示
  4. void QStatusBar::​showMessage(const QString & message, int timeout = 0)[slot]
复制代码
  
   

  
  1. // 清空显示
  2. void QStatusBar::​clearMessage()[slot]
复制代码
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表