网站设计网上培训学校网站如何被收录
QMianWindow
概述
 QMainWindow  是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多  
 
 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及  
 
 一个中心部件 (central widget)  
 
 许多应用程序的基础,如文本编辑器,图片编辑器等。  
 
 
菜单栏
 创建菜单栏:  
  #include <QMenuBar>  
  QMenuBar --> QMenuBar(QWidget *parent = Q_NULLPTR)  
  添加菜单栏:  
  QMainWindow --> void setMenuBar(QMenuBar *menuBar)  
   创建菜单:  
  #include <QMenu>  
  QMenu --> QMenu(const QString &title, QWidget *parent = Q_NULLPTR)  
  添加菜单:  
  QMenuBar --> QAction *addMenu(QMenu *menu);  
  QMenu --> QAction *addMenu(QMenu *menu); 
   创建菜单项:  
  #include <QAction>  
  QAction --> QAction(const QString &text, QObject *parent = nullptr)  
  添加菜单项:  
  QMenu --> addAction(const QAction *action)  
  添加分割线  
  QMenu->addSeparator()  
  设置快捷方式  
  QAction --> setShortcut(tr(" 快捷键 "));  
  QAction --> setShortcut(QKeySequence( 键 1+ 键 2));  
  如 :  
  qa --> setShortcut(tr("ctrl+n"));  
  qa -> setShortcut(QKeySequence(Qt::CTRL+Qt::Key_N));  
   QAction 的信号 
  void changed()  
  void hovered()  
  void toggled(bool checked)  
  void triggered(bool checked = false)  触发【推荐】 
 工具栏
 创建工具栏:  
 
 #include <QToolBar>  
 
 QToolBar --> QToolBar(QWidget *parent = Q_NULLPTR)  
 
 
 添加工具栏:  
 
 QMainWindow -->  
 
         void addToolBar(QToolBar *toolbar)  
 
         void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)  
 
                 Qt::LeftToolBarArea 左边显示  
 
                 Qt::RightToolBarArea 右边显示  
 
                 Qt::TopToolBarArea 上边显示  
 
                 Qt::BottomToolBarArea 下边显示 
 
 设置位置 
  setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea )  
   设置可移动性  
  setMoveable(false) //  工具条不可移动 ,  只能停靠在初始化的位置上 
 状态栏
 创建状态栏:  
 
 QStatusBar --> QStatusBar(QWidget *parent = Q_NULLPTR);  
 
 将控件添加到左边栏  
 
 void addWidget(QWidget *widget, int stretch = 0)  
 
 将控件添加到右边栏  
 
 void addPermanentWidget(QWidget *widget, int stretch = 0)  
 
 添加状态栏:  
 
 QMainWindow --> void setStatusBar(QStatusBar *statusbar) 
 
铆接部件
 创建铆接部件:  
 
 QDockWidget -->QDockWidget(const QString &title, QWidget *parent =  
 
 Q_NULLPTR)  
 
 添加铆接部件:  
 
 QMainWindow -->void addDockWidget(Qt::DockWidgetArea area,  
 
 QDockWidget* dockwidget)  
 
         Qt::LeftDockWidgetArea 左边  
 
         Qt::RightDockWidgetArea 右边  
 
         Qt::TopDockWidgetArea 上边  
 
         Qt::BottomDockWidgetArea 下边 
 
中心控件
 // 创建文本编辑控件  
 
 QTextEdit * userName = new QTextEdit(this);  
 
 userName->setText(" 文本编辑 ");  
 
 // 添加中心控件  
 
 setCentralWidget(userName); 
 
 
资源文件
 步骤 1: 创建资源管理文件夹 
 
 
 
 
 步骤2:添加前缀 
 
 
  步骤3:添加文件 
  1, 创建 image 文件夹  
  2, 将所需图片资源存储到该文件夹中  
  3, 将该文件夹拷贝到项目下  
  4, 先点击添加 , 选择添加文件  
  注意 : 添加完文件或修改别名之后,需要保存( Ctrl+S ) 
  别名  
 
  【注意】资源有别名后原资源路径无法访问该资源。  
  使用  
  QPixmap pix;  
  pix.load(":/image/up.png");  
  ui->label->setPixmap(pix);  
  this->setWindowIcon(QIcon(":/image/Sunny.jpg"));  
   注意 : 如果资源有别名直接使用 , 如 Sunny.jpg 的别名为 s 时 , 直接使用别名 , 如下  
  this->setWindowIcon(QIcon(":/s")); 
  对话框
 分类  
  对话框分为模态对话框和非模态对话框。  
  模态对话框,就是会阻塞同一应用程序中其它窗口的输入。  
  是非模态对话框,例如查找对话框,我们可以在显示着查找对话 框的同时,继续对记事本的内进行编辑  
   使用  QDialog::exec() 实现应用程序级别的模态对话框  
  使用  QDialog::open() 实现窗口级别的模态对话框  
  使用  QDialog::show() 实现非模态对话框  
  头文件 
  #include<QDialog> 
  基本对话框 
  对应类 :QMessageDialog 
 示例1: 
  QPushButton  * btn01  =  new  QPushButton ( " 消息对话框 : 提示框 " , this );  
  connect ( btn01 , QPushButton::clicked ,[ & ](){  
  QMessageBox::about ( this , " 关于 " , "QT5 之消息对话框 : 提示框 " );  
  }); 
   示例2: 
  QPushButton  * btn02  =  new  QPushButton ( " 消息对话框 : 警告框 " , this );  
  btn02 -> move ( 0 , 50 );  
  connect ( btn02 , QPushButton::clicked ,[ & ](){  
  QMessageBox::warning ( this , " 关于 " , "QT5 之消息对话框 : 警告框 " );  
  }); 
   示例3: 
  QPushButton  * btn03  =  new  QPushButton ( " 消息对话框 : 错误框 " , this );  
  btn03 -> move ( 0 , 100 );  
  connect ( btn03 , QPushButton::clicked ,[ & ](){  
  QMessageBox::critical ( this , " 关于 " , "QT5 之消息对话框 : 错误框 " );  
  }); 
 示例4: 
  QPushButton  * btn04  =  new  QPushButton ( " 消息对话框 : 消息框 " , this );  
  btn04 -> move ( 0 , 150 );  
  connect ( btn04 , QPushButton::clicked ,[ & ](){  
  QMessageBox::information ( this , " 关于 " , "QT5 之消息对话框 : 消息框 " );  
  }); 
   示例5: 
  QPushButton  * btn05  =  new  QPushButton ( " 消息对话框 : 选择框 " , this );  
  btn05 -> move ( 0 , 200 );  
  connect ( btn05 , QPushButton::clicked ,[ & ](){  
  QMessageBox::StandardButton sta ;  
  sta  =  QMessageBox::question ( this , " 问答 " , " 消息对话框你学会了吗 ?" );  
  if ( sta  ==  QMessageBox::Yes )  
  {  
          qDebug ()  <<  " 学会了 "  <<  endl ;  
  }  
  else  
  {  
          qDebug ()  <<  " 没学会 "  <<  endl ;  
  }  
  }); 
   文件对话框  
 头文件 
  #include <QFileDialog>  
 示例:   
  QPushButton  * btn06  =  new  QPushButton ( " 文件对话框 " , this );  
  btn06 -> move ( 0 , 250 );  
  connect ( btn06 , QPushButton::clicked ,[ & ](){  
  QString filename  =  QFileDialog::getOpenFileName ( this , " 文  
  件 " , "D:/" , "*.cpp" );  
  qDebug ()  <<  filename  <<  endl ;  
  }); 
  颜色对话框  
 头文件 
  #include <QColorDialog> 
 示例:          
   
    
   
     
        
     
   
     
   
      
   
                     
  QPushButton  * btn07  =  new  QPushButton ( " 颜色对话框 " , this );  
  btn07 -> move ( 0 , 300 );  
  connect ( btn07 ,  QPushButton::clicked ,[ & ](){  
  QColor color  =  QColorDialog::getColor ( Qt::white , this , " 颜色 " );  
  qDebug () << color . red () << " " << color . green () << " " << color . blue () << endl ;  
  }); 
   字体对话框 
 头文件 
  #include <QFontDialog>  
 示例:  
  
  QPushButton *btn08 = new QPushButton(" 字体对话框 ",this);  
  btn08->move(0,350);  
  connect(btn08, QPushButton::clicked,[&](){  
  bool yes = true;  
  QFont font = QFontDialog::getFont(&yes,QFont(" 宋体 "),this," 字体 ");  
  qDebug() << endl << font.family()<< endl;  
  qDebug() << font.pointSize() << endl;  
  }); 
  自定义对话框  
 创建 
 
 


 使用  
  1, 导入头文件  
  2, 使用 
  QPushButton  * btn09  =  new  QPushButton ( " 自定义对话框 " , this );  
  btn09 -> move ( 0 , 400 );  
  connect ( btn09 ,  QPushButton::clicked ,[ & ](){  
  MyDialog01  * dialog  =  new  MyDialog01 ( this );  
  dialog -> setWindowTitle ( " 自定义对话框 " );  
  // 模态对话框  
  //dialog->exec();  
  // 非模态对话框  
  dialog -> show ();  
  }); 
 布局方式
概述
 Qt  提供了两种组件定位机制:绝对定位和布局定位  
  1 ) 绝对定位: 是一种最原始的定位方法,给出这个组件的坐标和长宽值。  
  2 ) 布局定位: 只要把组件放入某一种布局,布局由专门的布局管理器进行管理,当  
  需要调整大小或者位置的时候, Qt 使用对应的布局管理器进行调整。  
  Qt  提供的布局中以下三种是我们最常用的:  
  QHBoxLayout :按照水平方向从左到右布局;  
  QVBoxLayout :按照竖直方向从上到下布局;  
  QGridLayout :在一个网格中进行布局,类似于  HTML  的  table ; 
  系统提供的布局控件  
 
 
 以上使用不灵活 
  利用 widget 做布局 
 
 
 常用UI控件
 QLabel 标签控件 
 语法 
  setText 设置文本  
  text 获取文本  
  setPixmap 显示图片  
  setMovie 显示动画  
 
 示例1 
  // 设置文本  
  ui->test01->setText(" 德玛西亚 ");  
  connect(ui->btn01,QPushButton::clicked,[&](){  
  QString str;  
  // 获取文本  
  str = ui->test01->text();  
  qDebug() << str << endl;  
  }); 
  示例2 
  // 设置图片  
  ui->test01->setPixmap(QPixmap(":/hd"));  
  ui->test01->setPixmap(QPixmap(":/image/Edit.png")); 
  示例3 
  // 设置动画  
  QMovie *movie = new QMovie(":/image/mario.gif");  
  ui->test01->setMovie(movie);  
  // 开始播放  
  movie->start();  
  // 停止播放  
  movie->stop(); 
  QLineEdit 标签控件 
 语法 
  QString text() const  
  void setText(const QString &)  
  void setEchoMode(EchoMode mode)  
  QLineEdit::Normal  模式显示方式,按照输入的内容显示。  
  QLineEdit::NoEcho  不显示任何内容,此模式下无法看到用户的输入。  
  QLineEdit::Password  密码模式,输入的字符会根据平台转换为特殊字符。  
  QLineEdit::PasswordEchoOnEdit  编辑时显示字符否则显示字符作为密  
  void setTextMargins(int left, int top, int right, int bottom) 
 示例 
  ui->lineEdit->setText("hello world");  
  ui->lineEdit->setEchoMode(QLineEdit::Password);  
  ui->lineEdit->setTextMargins(20,50,20,10);  
  connect(ui->btn,QPushButton::clicked,[&](){  
  QString str;  
  str = ui->lineEdit->text();  
  qDebug() << str.toUtf8().data() << endl;  
  }); 
  单选框  
 示例 
 
 
 代码 
  // 头文件中声明性别与年龄  
  private :  
  Ui::Widget  * ui ;  
  QString sex ;  
  QString hun ;  
  // 源文件  
  connect ( ui -> sexm , QPushButton::clicked ,[ & ](){  
  sex  =  ui -> sexm -> text ();  
  qDebug ()  <<  " 性别 :"  <<  sex . toUtf8 (). data ()  <<  endl ;  
  });  
  connect ( ui -> sexw , QPushButton::clicked ,[ & ](){  
  sex  =  ui -> sexw -> text ();  
  qDebug ()  <<  " 性别 :"  <<  sex . toUtf8 (). data ()  <<  endl ;  
  });  
  connect ( ui -> hun1 , QPushButton::clicked ,[ & ](){  
  hun  =  ui -> hun1 -> text ();  
  qDebug ()  <<  " 婚否 :"  <<  hun . toUtf8 (). data ()  <<  endl ;  
  });  
  connect ( ui -> hun2 , QPushButton::clicked ,[ & ](){  
  hun  =  ui -> hun2 -> text ();  
  qDebug ()  <<  " 婚否 :"  <<  hun . toUtf8 (). data ()  <<  endl ;  
  }); 
  多选框  
 示例 
 
 
 代码 
  // 头文件  
  // 存储多选选中内容的容器  
  QStringList list;  
  // 源文件,在 UI 文件中点击 CheckBox, 右击转到槽  
  void Widget::on_checkBox1_stateChanged(int arg1)  
  {  
  if(arg1 == 2){  
  list.append(ui->checkBox1->text());  
  } 
  else  
  {  
  list.removeOne(ui->checkBox1->text());  
  }  
  for(int i = 0; i < list.size(); i++)  
  {  
  qDebug() << list.at(i) << endl;  
  }  
  }  
  void Widget::on_checkBox2_stateChanged(int arg1)  
  {  
  if(arg1 == 2){  
  list.append(ui->checkBox2->text());  
  }  
  else  
  {  
  list.removeOne(ui->checkBox2->text());  
  }  
  for(int i = 0; i < list.size(); i++)  
  {  
  qDebug() << list.at(i) << endl;  
  }  
  }  
  void Widget::on_checkBox3_stateChanged(int arg1)  
  {  
  if(arg1 == 2){  
  list.append(ui->checkBox3->text());  
  }  
  else  
  {  
  list.removeOne(ui->checkBox3->text());  
  }  
  for(int i = 0; i < list.size(); i++)  
  {  
  qDebug() << list.at(i) << endl;  
  }  
  } 
  下拉列表 
  示例: 
 
 
 
 
 
 代码: 
  // 设置当前选中的位置  
  ui->comboBox->setCurrentIndex(2);  
  // 当选中发送改变时调用  
  void Widget::on_comboBox_currentIndexChanged(const QString &arg1)  
  {  
  qDebug() << arg1 << endl;  
  } 
 