QWidget 类是所有窗口类的父类 ,控件类也属于窗口类, 并且 QWidget 类的父类是QObject, 所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。
1.基本属性通过QWidget()构造一个窗口,并可以通过setParent设置窗口的父对象。
// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;
获取/设置窗口的位置和大小
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
/ 获取当前窗口的高度
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
示例:
// 获取当前窗口的位置信息
void MainWindow::on_positionBtn_clicked()
{
QRect rect = this->frameGeometry();
qDebug() setWindowModality(Qt::WindowModal); // 设置窗口的模态显示
progress->show(); //显示进度条
//3.跟新进度条
static int value = 0;
QTimer *timer = new QTimer;
connect(timer,&QTimer::timeout,this,[=](){
progress->setValue(value);
value++;
//当value > 最大值时停止
if(value > progress->maximum())
{
timer->stop();
value = 0;
delete progress;
delete timer;
}
});
//点击取消拷贝,停止
connect(progress,&QProgressDialog::canceled,this,[=](){
timer->stop();
value = 0;
delete progress;
delete timer;
});
timer->start(500); //启动定时器
QMainWindow 是标准基础窗口中结构最复杂的窗口,由菜单栏 , 工具栏 , 状态栏 , 停靠窗口组成
菜单栏:只能有一个,位于窗口的最上方 工具栏:可以有多个,默认提供了一个,窗口的上下左右都可以停靠 状态栏:只能有一个,位于窗口最下方 停靠窗口:可以有多个,默认没有提供,窗口的上下左右都可以停靠,可跟着鼠标移动悬浮
1.菜单栏顶级菜单可以直接在 UI 窗口中双击,直接输入文本信息即可,对应子菜单项也可以通过先双击在输入的方式完成添加,但是这种方式不支持中文的输入。
顶级菜单创建完之后,一般在外面创建出 QAction 对象,然后再将其拖拽到某个菜单下边,菜单项的添加就完成。
输入菜单项的相关属性
常用函数
// 给菜单栏添加菜单
QAction *QMenuBar::addMenu(QMenu *menu);
QMenu *QMenuBar::addMenu(const QString &title);
QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title);
// 给菜单对象添加菜单项(QAction)
QAction *QMenu::addAction(const QString &text);
QAction *QMenu::addAction(const QIcon &icon, const QString &text);
// 添加分割线
QAction *QMenu::addSeparator();
//菜单项 QAction 事件的处理,点击QAction对象发出该信号
[signal] void QAction::triggered(bool checked = false);
// save_action 是某个菜单项对象名, 点击这个菜单项会弹出一个对话框
connect(ui->save_action, &QAction::triggered, this, [=]()
{
QMessageBox::information(this, "Triggered", "我是菜单项");
});
2、工具栏
工具栏的操作和状态栏的操作一样。
先创建 QAction 对象,然后拖拽到工具栏中,和添加菜单项的方式相同。
常用函数
// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);
// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);
// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);
// 添加分隔线
QAction *QToolBar::addSeparator()
ui设计界面工具栏的属性
对应类的函数名: set+属性名 == 函数名
//给工具栏添加按钮和单行输入框
ui->toolBar->addWidget(new QPushButton("搜索"));
QLineEdit *edit = new QLineEdit;
edit->setFixedWidth(100);
ui->toolBar->addWidget(edit);
3.状态栏
一般情况下,需要在状态栏中添加某些控件,显示某些属性,使用最多的就是添加标签 QLabe。
状态栏操作函数
// 类型: QStatusBar,添加子控件
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);
//显示信息和清除信息的槽函数
[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);
//添加状态栏
ui->statusbar->showMessage("这是状态栏",5000);//显示5s自动消失
4.停靠窗口
停靠窗口可以通过鼠标拖动停靠到窗口的上、下、左、右,或者浮动在窗口上方。如果需要这种类型的窗口必须手动添加,如果在非QMainWindow类型的窗口中添加了停靠窗口, 那么这个窗口是不能移动和浮动的。浮动窗口在工具栏中, 直接将其拖拽到 UI 界面上即可。
停靠窗口也有一个属性面板,可以在其对应属性面板中直接进行设置和修改相关属性。
可以像窗口一样添加其他控件。
补充:添加资源文件
资源文件是一个存储资源的文件,在 Qt 中引入资源文件好处在于他能提高应用程序的部署效率并且减少一些错误的发生。在程序编译过程中, 添加到资源文件中的文件会以二进制的形式被打包到可执行程序中,这样这些资源就和可执行程序捆绑到一起,不会出现加载资源却找不到的问题。但是,资源文件中一般添加的都是比较小的资源。
操作步骤:Qt中添加资源文件
注意:
资源文件存放位置:放到和项目文件 .pro 同一级目录或者更深的目录中 错误的做法: 将资源文件放到 .pro文件的上级目录, 这样资源文件无法被加载到
可以资源文件设置别名,设置别名之后原来的名字就不能使用
资源文件路径:找到需要使用的资源图片节点,鼠标右键,弹出的菜单中选择 Copy Path
查找资源文件路径。