首页 > 其他分享 >[QT基础系列]窗口QWidget

[QT基础系列]窗口QWidget

时间:2024-10-25 12:50:50浏览次数:8  
标签:Widget const QT int void QWidget 窗口

QWidget

  • 所有窗口类的基类
    Qt 中有 3 个窗口的基类:QWidget、QMainWindow、QDialog
    在创建 Qt 工程时,会让我们选择继承自哪一个窗口类
    其中,QMainWindow、QDialog 都是继承自 QWidge

  • 所有控件类的基类
    Qt 中的控件类(按钮、输入框、单选框等)也属于窗口类
    它们的基类也是 QWidget;

  • 可以内嵌到其他窗口的内部,此时需要给其指定父窗口;

  • 可以作为独立的窗口显示,此时不能给其指定父窗口;

新建并显示 QWidget 窗口

右键,添加新文件,选择【Qt】->【Qt 设计师界面类】
在这里插入图片描述

选择模板
前三个对应 QDialog,后面的两个分别对应 QMainWindow 和 QWidget
选择【Widget】,然后下一步

然后来到 widget.cpp 文件中,添加如下代码,来显示 SubWidget 窗口:

思考:这里定义的并不是临时变量,而是new的对象,所以能够一直正常显示!

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

#if 0
    // 未指定父窗口,那么这个窗口就是独立的窗口
    // 需要调用其show方法来显示
    SubWidget* subWidget = new SubWidget();
    subWidget->setWindowTitle("SubWidget");
    subWidget->show();
#endif

#if 1
    // 如果指定了父窗口,那么就不用调用其show方法了
    // 因为:父窗口显示时,会将其子窗口一起显示出来。
    SubWidget* subWidget = new SubWidget(this);
    subWidget->setWindowTitle("SubWidget");
    // myWidget->show();
#endif
}

常用的属性和方法

窗口位置

// 1、设置窗体的几何信息
// 获取相对于当前窗口父窗口的几何信息:宽高、坐标点信息
const QRect &geometry() const;
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);

// 2、移动窗口。
// 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

窗口大小

通常,窗口可以拖动其右下角,进行放大和缩小。我们可以设置窗口的最小大小和最大大小;另外,窗口可以设置为固定大小,这样窗口就不能放大和缩小;
常用的设置大小的函数如下:

// 1、设置窗口尺寸
QSize size() const
void resize(int w, int h);
void resize(const QSize &);

// 2、设置最大尺寸
QSize maximumSize() const;
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);

// 3、设置最小尺寸
QSize minimumSize() const;
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);

// 4、设置固定尺寸
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);

// 5、单独设置窗口的高度
int height() const;
int minimumHeight() const;
int maximumHeight() const;

void setFixedHeight(int h);
void setMaximumHeight(int maxh);
void setMinimumHeight(int minh);

// 6、单独设置窗口的宽度
int width() const;
int minimumWidth() const;
int maximumWidth() const;

void setFixedWidth(int w);
void setMaximumWidth(int maxw);
void setMinimumWidth(int minw);

窗口标题、图标、资源文件

设置和获取窗口的标题,直接使用如下两个函数即可:

// 获取和设置窗口的标题
QString windowTitle() const;
void setWindowTitle(const QString &);

设置窗口的图标,需要一个 QIcon 对象,如下:

// 获取和设置窗口的图标
QIcon windowIcon() const;
void setWindowIcon(const QIcon &icon);

// 构造 QIcon 图标对象
// 有 6 个重载的构造方法,通常我们使用最后一个
// 参数为图标文件的路径
QIcon::QIcon(const QString &fileName);

首先将图标文件 clock.ico,复制到项目目录 QWidgetTest 下的 icon 目录中,在项目上右键,选择【添加新文件…】,选择【Qt Resource File】,这样就会在项目中,添加一个 .qrc 的文件,资源文件命名为 main.qrc,点击完成就会在项目中,添加一个 main.qrc 的资源文件,接下来打开 “资源文件编辑器”:
点击 “Add Prefix”,添加前缀:
在这里插入图片描述
再点击 “Add Files”,定位到拷贝到项目目录下的图标文件clock.ico:
在这里插入图片描述

void Widget::on_btnGetSize_clicked()
{
    qDebug() << "---------------------------------";
    QRect rect = this->geometry();
    qDebug() << "左上角: " << rect.topLeft();
    qDebug() << "右上角: " << rect.topRight();
    qDebug() << "左下角: " << rect.bottomLeft();
    qDebug() << "右下角: " << rect.bottomRight();
    qDebug() << "宽度: " << rect.width();
    qDebug() << "高度: " << rect.height();
}

void Widget::on_btnSetSize_clicked()
{
    this->resize(400, 400);
}

void Widget::on_btnSetFixedSize_clicked()
{
    this->setFixedSize(500, 500);
}

void Widget::on_btnSetMinSize_clicked()
{
    this->setMinimumSize(300, 300);
}

void Widget::on_btnSetMaxSize_clicked()
{
    this->setMaximumSize(600, 600);
}

void Widget::on_btnMove_clicked()
{
    this->move(100, 100);
}

void Widget::on_btnSetTitle_clicked()
{
    this->setWindowTitle("演示QWidget");
}

void Widget::on_btnSetIcon_clicked()
{
    this->setWindowIcon(QIcon(":/icon/clock.ico"));
}

标签:Widget,const,QT,int,void,QWidget,窗口
From: https://blog.csdn.net/m0_67194883/article/details/143173363

相关文章

  • [QT基础系列]标签QLabel
    标签QLabelQLabel是Qt中的标签类,通常用于显示提示性的文本,也可以显示图像文本可以获取和设置按钮上显示的文本//获取和设置显示的文本QStringtext()const;voidsetText(constQString&text);对齐方式用于设置标签中的内容在水平和垂直两个方向上的对齐方式......
  • QtCreator开发工具
    视图及分栏项目视图文件系统视图书签视图ctrl+m添加书签编辑区打开文档列表类列表分栏常用快捷键使用键盘模拟鼠标操作代码编辑Ctrl+[Shift]+Enter在当前行的下方[上方]插入空白行Ctrl+l[;]代码对齐[格式化]Shift+Delete剪切当前行,可以当做删除用Ctrl+/......
  • 实现Qtextedit控件大小改变时候希望不重新绘制
    实现Qtextedit控件大小改变时候希望不重新绘制4.备选方案5.完整示例6.总结要在QTextEdit控件大小改变时防止其重新绘制,可以通过创建一个自定义的QTextEdit子类,并重载相关事件来控制绘制行为。以下是实现这一目标的详细步骤和示例代码:创建自定义的QTextEdit......
  • 如何在QT5+MinGW环境中编译使用Marble开发地图地球仪
    Marble它是一个虚拟地球仪和地图应用程序,支持多种平台。Marble提供2D和3D的地图视图,能够展示各种地理信息,像卫星图、街道图、气象图等。它还支持自定义插件、路线规划、离线地图等功能,适合地理信息系统(GIS)和教育用途。Marble有多种使用场景,可以集成到Qt应用中。你......
  • Qt 进程保活(开源,国产环境)QTableWidget列表
    效果图第一步设计器拖拽一个QTableWidget和三个QPushButton,布局一下第二步上码1.mainwindow.h代码如下(示例):#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QDebug>#include<QPushButton>#include<QLabel>#include<QFileInfo......
  • vue - 自定义吸附窗口
    业务需求以共享单车界面为例,地图上分布着大量的共享单车,鼠标悬浮在单车上,弹出一个吸附弹窗,内容显示单车详细信息。分析很明显,因为单车的数量可能非常多,我们不可能用显示隐藏的方式实现;合理的做法是,所有单车公用一个弹窗面板,悬浮的时候刷新面板上的数据。方案看着改吧,element......
  • qt5multimedia播放rtsp延迟高
    Qt5Multimedia在Liunux平台已实现对Gstreamer的支持,近期在RK3588平台,使用Qt5Multimedia播放RTSP流时,遇到延迟高问题(3s左右),查看API,Qt5Multimedia无法向Gstreamer传递参数。解决办法:重新编译qt5multimedia;修改qt5multimedia/src/gsttools/qgstreamerplayersession.cppGstE......
  • Qt/C++路径轨迹回放/回放每个点信号/回放结束信号/拿到移动的坐标点经纬度
    一、前言说明在使用百度地图的路书功能中,并没有提供移动的信号以及移动结束的信号,但是很多时候都期望拿到移动的哪里了以及移动结束的信号,以便做出对应的处理,比如结束后需要触发一些对应的操作。经过搜索发现很多人都有这个需求,需要在js文件中加上一点代码才行,也就是在start开始......
  • 【模板】FHQtreap
    mt19937rnd(time(0));structFHQtreap{ intlc[N],rc[N],val[N],key[N],siz[N],pool,root; intcreate(intx){ intp=++pool; val[p]=x; siz[p]=1; key[p]=rnd(); lc[p]=rc[p]=0; returnp; } voidupdate(intp){ if(!p)return; siz[p]=siz[lc[p]]+si......
  • Electron+vue3+vue Router中打开新窗口时候,新窗口的渲染内容无法按照原来的URL渲染的
    如果在router中设置了histroyhistory:createMemoryHistory(),那么在electron中打开新窗口时候,即使指定了login页面,他也会与打开主窗口的重定向路由页面一样我就是看文档时候用了官方的例子解决方法:使用history:createWebHistory(import.meta.env.BASE_URL),重点:cre......