今天开始就不称小白了,虽然在qt学习中还是入门。但好歹发了这么多,add(今天真的很开心)
1.QWidget
平常生活中我们都是见过弹窗的,QWidget默认的函数很多,我们来看一下。
老样子,先来三个按钮,分别表示:最大化,最小化,关闭
//用auto主要是方便,大家也不要忘了原本的命名方式
auto m_btn=new QPushButton("按钮",this);
auto closeBtn=new QPushButton("X",this);
auto miniBtn=new QPushButton("-",this);
auto maxBtn=new QPushButton("大",this);
//给他们设置大小,位置,这里没有用ui设计,全是手打的
closeBtn->setFixedSize(40,40);
miniBtn->setFixedSize(40,40);
maxBtn->setFixedSize(40,40);
flushBtn->setFixedSize(40,40);
closeBtn->move(600,0);
miniBtn->move(560,0);
maxBtn->move(520,0);
flushBtn->move(480,0);
//看一下效果,为什么我们的是无边框的呢?
是因为
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
我们去掉了边框和拉伸,我们在前面的学习中,自己设计过一个qq界面所以当然要去边框了
2.实现功能
(1)常见的功能有哪些呢,我们先来看看关闭(close)
connect(closeBtn, &QPushButton::clicked, [=]
{
close();
});
用我们的槽函数来处理按钮点击消息,然后再lamda表达式中调用,close函数。
(2)我们来看第二个,最大化。我们在平时使用窗口时,是不是最大化点完后,再点一下就可以回到原来的大小呢?
connect(maxBtn, &QPushButton::clicked, [=]
{
//如果窗口是最大化的,恢复正常显示
if (isMaximized())
{
//正常显示
showNormal();
}
//如果窗口不是最大化的,那就最大化
else
{
showMaximized();
}
});
(3)然后就是最小化了,调用的是 showMinimized()函数
connect(miniBtn, &QPushButton::clicked, [=]
{
showMinimized();
});
(4)最后既然讲到窗口了,我们就来看看窗口的切换是如何实现的把
QPointer<QWidget> subWindow;
这是什么呢,这是qt的指针<>中的是指针的类型,这里我们创建了一个QWidget的指针,也就是我们的新窗口啦。
当然在我们的构造函数中也是要给他构造一下的熬。
我们来看这几行代码,因为平时我们都是单个窗口进行构造,所以习惯了直接写函数(这是c++的特色),但当有新的对象进来后,一定记得要给指针熬,然后我们来运行一下。
是不是出现了两个窗口呢,那为什么小窗口在左上角呢,是因为我们给他设定了几何位置。
subWindow->setGeometry(0, 0, 200, 200);参数从左到右分别是 x,y,width,height
注意看show是主窗口show,hide是subWindow隐藏这就实现了切换。
auto newbtn=new QPushButton("我也是按钮",subWindow);
connect(newbtn,&QPushButton::clicked,this,[=]()
{
this->show();
subWindow->hide();
});
(5)窗口的拖拽
通常我们是鼠标左键点击后,拖动整个窗口移动。所以我们要使用鼠标事件,值得注意的时,我们需要获取相对位移,因为要拖拽这个窗口自然是要计算窗口和屏幕的位移,让它和鼠标的位移一致。
void mousePressEvent(QMouseEvent * event)
{
mouse_pos = event->globalPos();// 窗口左上角到鼠标的距离
window_pos = this->pos();// 从windows左上角到窗口左上角的距离
diff_pos = mouse_pos - window_pos;
}
void mouseMoveEvent(QMouseEvent* event)
{
QPoint pos = event->globalPos();// 鼠标相对于桌面的绝对位置
// this->move(pos);// 不能直接移动
this->move(pos - diff_pos);
}
QPoint diff_pos;// 鼠标和窗口的相对位移
QPoint window_pos;
QPoint mouse_pos;