目录
下面简要介绍一下
1.第一个Qt程序
注意:保存路径名不能包含中文字
2.父窗口和子窗口的区别(控件,部件,构件)
#include<QApplication>
#include<QWidget> //窗口控件基类
#include<QPushButton>
int main(int argc,char **argv)
{
QApplication app(argc,argv);
QWidget w;
w.setWindowTitle("HelloQt"); //设置标题
QPushButton b;
b.setText("^_^"); //给按钮设置内容
b.setParent(&w); //指定父对象
b.move(100,100); //移动坐标
QPushButton b1(&w); //通过构造函数传参
b1.setText("*_*");
w.show();
app.exec();
return 0;
}
/ * 如果不指定父对象,对象和对象(窗口和窗口)没有关系,独立
* a指定b为它的父对象,a放在b的上面
* 指定父对象,有2种方式:
* 1)setParent
* 2)通过构造函数传参
* 指定父对象,只需要父对象显示,上面的子对象自动显示
* /
3.信号与槽
构造两个独立的窗口来解释信号与槽的关系
main.cpp
#include "mainwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWidget w; //执行MainWidget的构造函数
w.show();
return a.exec();
}
mainwidget.cpp
#include "mainwidget.h"
#include <QPushButton>
#include <QDebug> //
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(100,100);
b2=new QPushButton(this);
b2->setText("*_*");
connect(&b1,&QPushButton::pressed,this,&MainWidget::close);
connect(b2,&QPushButton::released,this,&MainWidget::mySlot);
connect(b2,&QPushButton::released,&b1,&QPushButton::hide); //隐藏按钮1
setWindowTitle("老大");
//this->setWindowTitle("老大");
b3.setParent(this);
b3.setText("切换到子窗口");
b3.move(50,50);
connect(&b3,&QPushButton::released,this,&MainWidget::changeWin);
//处理子窗口的信号
void (SubWidget::*funSignal)()=&SubWidget::mySignal;
connect(&subWin,funSignal,this,&MainWidget::dealSub);
void (SubWidget::*testSignal)(int,QString)=&SubWidget::mySignal;
connect(&subWin,testSignal,this,&MainWidget::dealSlot);
resize(400,300);
}
void MainWidget::dealSlot(int a,QString str)
{
qDebug()<< a << str;
}
void MainWidget::mySlot()
{
b2->setText("haha123");
}
void MainWidget::changeWin()
{
//子窗口显示
subWin.show();
//本窗口隐藏
this->hide();
}
void MainWidget::dealSub()
{
//子窗口隐藏
subWin.hide();
//本窗口显示
show();
}
MainWidget::~MainWidget()
{
}
subwidget.cpp
#include "subwidget.h"
SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("小弟");
b.setParent(this);
b.setText("切换到主窗口");
connect(&b,&QPushButton::clicked,this,&SubWidget::sendSlot);
resize(400,300);
}
void SubWidget::sendSlot()
{
emit mySignal();
emit mySignal(250,"我是子窗口");
}
SubWidget::~SubWidget()
{
}
红色箭头的按钮均可按压并触发信号与槽函数