QT学习day02---图形界面、对话框、信号与槽

版权声明:版权声明:本文章刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等均归"江南、董少"所有! https://blog.csdn.net/qq_41453285/article/details/83382224

一、QT图形界面

①QT坐标轴
起点:左上角
X:横轴
Y:纵轴

②QWidget、QDialog、QMainWindow的异同点
QWidget:窗口为空,什么内容都没有
QMainWindow:含有菜单栏,状态栏,工具栏等…已经包含了QWidget
QDialog:对话框(消息对话框,文件对话框等)

③编码设置
Windows下需要设置,Linux下不需要设置
在这里插入图片描述

④QMainWindow窗口
菜单栏(Menu Bar)
工具栏(ToolBars)
浮动部件(Duck Widgets)
主窗口(Central Widget)
状态栏(Status Bar)
在这里插入图片描述

注意:窗口设计的代码需要放在构造函数中ui->setupUi(this);代码后面

二、对话框

分为:模态对话框、非模态对话框、半模态对话框
对话框的操作函数:

#include <QDialog>//头文件
setWindowTitle("窗口名");//设置对话框标题名
resize(宽,高);  //设置对话框的窗口大小
setModal(true/false);  //设置对话框是否为模态
show();  //显示对话框
exec();  //等待操作

①模态对话框
(1)概念:此对话框未关闭时,不能对此应用中的其他窗口进行操作
(2)使用:创造对话框对象后,与exec();配合使用
程序执行到exec();时,如果不对对话框进行操作,后面的代码不会执行

QDialog *dlg = new QDialog(&w);//创建对话框对象,参数:父窗口
dlg->setWindowTitle(QStringLiteral("模态对话框"));
dlg->exec();  //exec:窗口等待结束(点击确定或关闭)

②非模态对话框
概念:此对话框未关闭时,还可以对此应用中的其他窗口进行操作
使用:对话框关闭前,使用show();

QDialog *dlg = new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("非模态对话框"));
dlg->show();

③半模态对话框
适用于有进度条的操作
(1)概念:也是模态的一种,此对话框未关闭时,也不允许对此应用的其他窗口进行操作
(2)使用:调用setModal(true);或者setWindowModality();后,然后再show();

QDialog* dlg=new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("半模态对话框"));
dlg->setModal(true);
dlg->show();

与exec();的区别:exec();需要程序返回一个值才可以继续执行后面的代码,
而半模态show();函数后面的代码已经执行了

三、信号与槽

①概念:在Qt中使用信号和槽机制来完成对象之间的协同操作(信号和槽都是函数)
②三种方式实现信号与槽:
(1)自动关联
在ui界面创建时,右击转到槽,然后选择信号,会自动创建一个槽函数
在这里插入图片描述
在这里插入图片描述
创建消息后,会响应产生对应的槽函数,函数名一般以on_开头

扫描二维码关注公众号,回复: 3821375 查看本文章
//此案例产生的槽函数,就可以在此槽函数中做一系列操作
private slots:
    void on_pushButton_clicked();

(2)connect()关联

connect()
//参数:1.发射者 2.信号函数 3.接收者  4.槽函数

注意:信号函数与槽函数的参数必须一致

信号函数:只需要定义,不需要实现,没有实体
槽函数:响应函数,需要实现功能

例:定义了一个按钮pushButton,定义了一个编辑框lineEdit
1.使用系统定义的信号函数

//在槽中定义槽函数
private slots:
    void pushButton(bool);
    
//实现槽函数
void MainWindow::pushButton(bool)
{
    ui->lineEdit->setText("100");
}

//在构造函数中使用connect()函数
参数:1.按钮变量 2.默认的按钮的信号函数clicked 3.接受者为自身 4.槽函数
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(pushButton(bool)));

2.使用自定义的信号函数
需要在自定义的环境条件下发射信号:emit+信号函数

//在信号中定义一个信号函数
signals:
    void pushButtonSignal();

//在槽中定义槽函数
private slots:
	void pushButtonSlot(bool);//一个含有发送信号的函数
    void pushButtonMySlot();
    
//实现槽函数
void MainWindow::pushButtonSlot(bool value)
{
    emit pushButtonSignal();//发送信号
}
void MainWindow::pushButtonMySlot()
{
    QMessageBox::aboutQt(this);  //弹出一个对话框
}

//使用connect()函数
//原理:当执行pushButtonSlot函数时,发射信号,connect()接受并执行pushButtonMySlot()函数
connect(this, SIGNAL(pushButtonSignal()), this, SLOT(pushButtonMySlot()));

(3)在ui设计中关联
在ui界面,按下F4,鼠标左击进行关联,跳出对话框后,选择不同的功能
附:不建议使用,因为不易维护且不易辨别
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/83382224