一、QWidget的显示和隐藏
注意:槽函数在子线程中直接调用会发生崩溃,但是信号可以在子线程中调用,在QWidget的子类中绑定信号槽即可。
二、QWidget常用方法
- hide():隐藏窗口。
- show():显示窗口。
- QRect &QWidget::geometry():可以获取窗口的x,y,weight,height。
- setGeometry(int x, int y, int w, int h):设置窗口位置和窗口的宽度和高度。有重载该函数setGeometry(const QRect &)。
- move(int x,int y):移动窗口位置。
- resize(int w,int h):重置窗口的宽度和高度。
1. 子线程中调用信号函数实现窗口移动
MyThread.h
#include "qthread.h"
#include <QWidget>
class MyThread :public QThread
{
Q_OBJECT
public:
MyThread();
~MyThread() { terminate(); };
void run() {
for (int i = 0; i < 1000; ++i)
{
Move(i, i); //调用信号函数
msleep(50); //每次移动线程休眠50毫秒
}
};
signals:
void Move(int x, int y);
};
窗口类中添加一个槽函数即可。
private slots:
void slotMove(int x, int y) { QWidget::move(x, y); };
mian.cpp中绑定信号和槽,开启一个线程。
#include "QtWidgetsApplication1.h"
#include <QtWidgets/QApplication>
#include <QThread>
#include "MyThread.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtWidgetsApplication1 w;
w.show();
MyThread thread;
QObject::connect(&thread, SIGNAL(Move(int, int)), &w, SLOT(slotMove(int, int)));
thread.start();
return a.exec();
}
2. 窗口状态-最大化最小化全屏
- void setWindowState(Qt::WindowStates state):设置窗口状态。WindowNoState:正常状态;WindowMinimized:最小化;WindowMaximized:最大化;WindowFullScreen:全屏;WindowActive:可以活动状态。
- 也可以用QWidget提供的四个槽函数进行设置:void showFullScreen();void showMaximized();void showMinimized();void showNormal();
3. 定制窗口类型
-
setWindowFlags(Qt::WindowFlags type):设置窗体类型。Qt::FramelessWindowHint 无边框的窗体;
-
setWindowFlag(Qt::WindowType, bool on = true):
函数重载,setWindowFlag(Qt::WindowMinimizeButtonHint,false),设置最小化按钮不显示,但是可以显示,但是不能点击。效果如下:
setWindowFlag(Qt::WindowMaximizeButtonHint,false) :设置最大化按钮不显示,效果如下:
setWindowFlag(Qt::WindowMinMaxButtonsHint,false):也可以同时设置最小化,最大化按钮不显示 ,效果如下:
setWindowFlags(Qt::WindowTitleHint | Qt::CustomizeWindowHint):标题栏保留,去除标题栏上的所有按钮。
setWindowFlags(Qt::WindowCloseButtonHint):保留标题栏和关闭按钮。 -
setWindowFlags(Qt::CustomizeWindowHint);//设置窗口标题栏自定义
-
setWindowFlags(Qt::WindowMinimizeButtonHint);//设置窗口的标题栏只有最小化的按钮
-
setWindowFlags( Qt::WindowCloseButtonHint );//设置窗口的标题栏只有关闭的按钮
-
setWindowFlags(Qt::WindowStaysOnTopHint);//设置窗体一直置顶,并且不会抢焦点
-
this->setWindowFlags(this->windowFlags());//设置窗口为QT的默认属性
-
this->setWindowFlags(Qt::FramelessWindowHint));//设置窗体无边框,不可拖动拖拽拉伸
-
this->setWindowModality(Qt::WindowModal); //设置窗体为模态