一、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_开头
//此案例产生的槽函数,就可以在此槽函数中做一系列操作
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,鼠标左击进行关联,跳出对话框后,选择不同的功能
附:不建议使用,因为不易维护且不易辨别