QT 基础知识点
1.基础窗口类QMainWindow qDialog Qwidget
随项目一起创建的窗口基类有三个可选QMainWindow qDialog Qwidget
1.1 Qwidget
是所有窗口的基类,只要是他的子类,或子类的子类,都具有他的属性。
右键项目 Add New -> Qt qt设计师界面类,选择Widget, 写个名字,就可以在项目中添加一个基于窗口的类,此时就多出了ui文件。
如上图就是刚新加的窗口,自动添加的代码如下
#ifndef TESTWIDGET_H
#define TESTWIDGET_H#include <QWidget>namespace Ui {
class testwidget;
}class testwidget : public QWidget
{Q_OBJECTpublic:explicit testwidget(QWidget *parent = nullptr);~testwidget();private:Ui::testwidget *ui;
};#endif // TESTWIDGET_H
没有指定父对象时,新建的窗口是独立于主窗口,带边框的。
如果指定了父对象,就不是独立窗口了,与父窗口绑定了,就不需要show了,父窗口显示时能自动显示子窗口内容,且子窗口是被内嵌到主窗口了,就没边框了,只保留了父类的边框。
1.2 QDialog (是Qwidget的子类)
QDialog 是一个对话框类,不能内嵌到父类中,是独立存在的
还是按照上面的方法添加一个QDialog窗口,这里一般选第三个,不带按钮的,如果需要可以自己实现。
添加完新的对话窗口后,在主窗口的构造函数立,new他的对象。
// 再在主要窗口下新建一个对话窗口Dialog* d = new Dialog(); // 一般不用指定父对象,因为他是独立于主窗口的d->show(); // 这种显示为非模态示为非模态
输出效果如下,这个对话框窗口是独立于主窗口的,而且为非模态窗口,焦点可以切换的。
如果换成模态显示,他会阻塞程序,直到该对话窗口被关闭,程序才会继续执行。如下图,只显示了对话窗口,主窗口并没有显示,是因为函数阻塞在这了。而且模态窗口不能进行焦点切换的,不能切换页面了,只显示当前页面。
// 模态显示d->exec();
1.3 QMainWindow(是Qwidget的子类)
可以包含菜单栏,工具栏。状态栏。也不能内嵌到别窗口,是有自己的边框,独立存在的。
在ui界面 可以右键,进行工具栏菜单栏的删除创建等操作
2. qt中的坐标体系
原点在左上角,即坐标向右递增和向下递增的。子窗口的位置就是基于父窗口的左上角的。多窗口的位置是一个对应一个的。是相对的。move 可以指定控件的位置(相对位置)
move(10, 10);