欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt踩坑之第二天(图形界面开发的基础)

程序员文章站 2022-06-06 16:06:13
...

1、Qt的坐标系
2、QWidget、QDialog、QMainWindow的异同点
3、窗口的几何尺寸
4、QMainWndow主窗口
5、模态、非模态、半模态对话框的区别
6、信号与槽

Qt的两把利刃:UI设计器+信号与槽
1、Qt的坐标系
Qt踩坑之第二天(图形界面开发的基础)
2.QWidget、QDialog、QMainWindow的异同点
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
消息对话框
文件对话框
Qt踩坑之第二天(图形界面开发的基础)
3、窗口的几何尺寸
在Qt助手中搜索:Winddow and Dialog Widgets
Qt踩坑之第二天(图形界面开发的基础)
Including the window frame:x(),y(),frameGeometry(),pos(),and move(),含边框
Excluding the window frame:geometry(),width(),rect(),and size().不含边框

 qDebug()<<"openGLWidget‐>x();"<<ui‐>openGLWidget‐>x();   
   qDebug()<<"openGLWidget‐>y();"<<ui‐>openGLWidget‐>y();  
   qDebug()<<"openGLWidget‐>pos();"<<ui‐>openGLWidget‐>pos();
  qDebug()<<"openGLWidget‐>frameGeometry();"<<ui‐>openGLWidget>frameGeometry();   
  qDebug()<<"openGLWidget‐>geometry();"<<ui‐>openGLWidget>geometry(); 
  qDebug()<<"openGLWidget‐>width();"<<ui‐>openGLWidget>width();    
   qDebug()<<"openGLWidget‐>height();"<<ui‐>openGLWidget>height();  
  qDebug()<<"openGLWidget‐>size();"<<ui‐>openGLWidget‐>size();  
 qDebug()<<"openGLWidget‐>rect();"<<ui‐>openGLWidget‐>rect();

用尺量
Qt踩坑之第二天(图形界面开发的基础)
Qt踩坑之第二天(图形界面开发的基础)
4、QMainWindow主窗口
Assistant查看QMainWindow
Qt踩坑之第二天(图形界面开发的基础)
菜单栏
工具栏
中心组件
停靠组件
状态栏
这里以Qt助手为例,进行解说概念
Qt踩坑之第二天(图形界面开发的基础)
5、模态、非模态、半模态对话框的区别
像WPS:另存为对话框
Qt踩坑之第二天(图形界面开发的基础)
模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取 消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话 框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对 象的操作。
显示模态对话框常见的方法是调用其exec()函数,当用户关闭对话框,exec()将提供 一个有用的返回值,并且这时流程控制继续从调用exec()的地方进行。通常情况下,
5 模态、非模态、半模态对话框的区别
要获得对话框关闭并返回相应的值,我们连接默认按钮,例如:”确定”按钮连接到 accept()槽,”取消”按钮连接到reject()槽。另外我们也可以连接done()槽,传递给它 Accepted或Rejected。
``

  w.setWindowTitle(QStringLiteral("我是主界面"));   //w.setWindowTitle(QString::fromLocal8Bit("中文"));  
 w.show();
QDialog *dlg=new QDialog(&w);  dlg‐>setWindowTitle(QStringLiteral("模态对话框")); 
 dlg‐>exec(); 
  w.setWindowTitle(QStringLiteral("主界面模态对话框")); 
  qDebug() << QStringLiteral("关闭模态对话框以后,可以继续向下执行"); 


和同一个程序中其他窗口操作无关的对话框。在文字处理中的查找和替换对话框通常是非模式的,允许用户同时与应用程序的主窗口和对话框进行交互。调用show()来显示非模态对话框,并立即将控制返回给调用者。
如果隐藏对话框后调用show()函数,对话框将显示其原始位置,这是因为窗口管理器决定的窗户位置没有明确由程序员指定,为了保护被用户移动对话框的位置,在closeEvent()中进行处理,然后在显示之前,将对话框移动到该位置。
WPS中的查找就是非模态对话框

Qt踩坑之第二天(图形界面开发的基础)

w.setWindowTitle(QStringLiteral("我是主界面"));   
  //w.setWindowTitle(QString::fromLocal8Bit("中文"));  
     w.show();
   QDialog *dlg=new QDialog(&w);   
    dlg‐>setWindowTitle(QStringLiteral("非模态对话框"));   
     dlg‐>show();    
    w.setWindowTitle(QStringLiteral("主界面非模态对话框"));   
     qDebug() << QStringLiteral("非模态对话框可立即执行");  ```
  //  主界面不会被阻塞,可以进行点击、拖动等任何操作。 show()之后的代码会立即执行。
   // 半模态 调用setModal(true)或者setWindowModality(),然后show()。有别于 exec(),show() 立即返回给控制调
   //用者。 对于进度对话框来说,调用setModal(true)是非常有用的,用户必须拥有与其交 互的能力,例如:取消         // 长时间运行的操作。
     ```w.setWindowTitle(QStringLiteral("我是主界面"));   
       //w.setWindowTitle(QString::fromLocal8Bit("中文"));   
         w.show();
        QDialog *dlg=new QDialog(&w); 
        dlg‐>setWindowTitle(QStringLiteral("半模态对话框"));     
        dlg‐>setModal(true);   
          dlg‐>show();   
         w.setWindowTitle(QStringLiteral("主界面半模态对话框"));     
         qDebug() << QStringLiteral("半模态对话可立即执行");

适用于有进度条等的工作
6、信号与槽
在Qt中使用信号与槽机制来完成对象之间的协同操作。
相当于Win32的回调函数
简单来说,信号和槽都是函数,比如按下窗口上的一个按钮后想要改变一个窗口上label的文字,那么就可以将这个按钮的单击信号和我们定义的槽关联起来,在槽中中 修改label上的文字。这样,当单击这个按钮时就会发射信号,进而执行我们的槽来修 改文字。
有三种方式创建信号与槽
自动关联 (推荐)
Qt踩坑之第二天(图形界面开发的基础)
这种方式,signal都是对象指针自带的,slot格式是on_xxx_xxx
Qt踩坑之第二天(图形界面开发的基础)
槽函数名构成: on_对象名称_信号类型 使用connect()关联 (吐血推荐)
格式:connect(发射者对象指针, SIGNAL(信号函数) , 接收者对象指针, SLOT(槽
函数),连接方式)

 //发射者  信号   接收者  槽   
connect(ui‐>pushButton_2, SIGNAL(clicked(bool)), this,  
SLOT(pushButton2Slot(bool)));
  connect(this, SIGNAL(pushButton2Signal()), this,  SLOT(pushButtonMySlot()));

有时候用Qt写没有界面的程序
信号与槽都是qt自带的接口,可以这样写

connect(ui‐>pushButton_3, &QPushButton::clicked, this,  &QWidget::close);

设计模式中关联 (不推荐)
F4:信号与槽模式
F3:编辑窗口模式 Edit widget
Qt踩坑之第二天(图形界面开发的基础)
因为维护不方便,所以并被推荐。

Qt踩坑之第二天(图形界面开发的基础)