欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 初识Qt · 实现Hello world的N种细节和坐标系

初识Qt · 实现Hello world的N种细节和坐标系

2025/9/15 10:54:45 来源:https://blog.csdn.net/2301_79697943/article/details/145020239  浏览:    关键词:初识Qt · 实现Hello world的N种细节和坐标系

目录

前言:

文本编辑框实现

Push button实现

简述信号与槽

小小的总结

如果是纯代码的方式:

如果是图形化的方式:

坐标系


前言:

前文我们花费了许多时间,介绍了使用label实现hello world的多种细节,主要是包括了纯代码的方式和图形化的方式是否会引发内存泄漏乱码的问题,从而引出了QT在这两个方面的具体处理,剩下的小点就是ui界面插入控件之后的xml格式的ui文件发生了哪些变化,加上简单理解了一下对象树的概念。

在本文,我们学习使用其他的方式打印Hello world,并且介绍其中隐藏的细节。

那么废话不多说,进入主题吧!


文本编辑框实现

对于编辑框,分为两种,一种是单文本编辑框,一种是多文本编辑框。

其中,Line Edit和Text Edit分别就是单文本编辑框和多文本编辑框。

我们这里就使用纯代码的方式和图形化的方式操纵单文本编辑框来打印一个Hello world。

第一种是纯代码的方式,十分简单,一个拖拽,一个输入就完事儿了,我们不止可以双击该文本操作,我们也可以选中右边的属性列表:

这个text即文本编辑内容。

然后是纯代码方式:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* lineEdit = new QLineEdit(this);lineEdit->setText("Hello world");
}Widget::~Widget()
{delete ui;
}

这是纯代码的方式,可以说和之前使用label实现一点差别没有。

接下来我们看看使用button实现。


Push button实现

同样,我们先使用一下图形化的方式:

选中push button,直接拖拽,然后输入对应的内容即可。

接着是纯代码的方式:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* lineEdit = new QLineEdit(this);lineEdit->setText("Hello world");QPushButton* pushbutton = new QPushButton(this);pushbutton->setText("Hello qt");
}Widget::~Widget()
{delete ui;
}

好了以上是两种Hello world的打印,那么,本文也是~啊~不可能就这样结束的。

你说,这个按钮按下了难道就按下了吗?显然不能,所以我打算在这里十分简单的介绍一下信号槽这个概念。


简述信号与槽

信号与槽这个概念可以说是QT中的核心,但是更细节的地方呢,我们放在之后介绍,我们现在简单理解就是,当我们按下按钮之后,会发送一个信号,然后我们可以使用connect函数捕捉,执行关联函数,具体使用为:

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void headle(){qDebug() << "Hello linux";}private:Ui::Widget *ui;
};
#endif // WIDGET_H
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* lineEdit = new QLineEdit(this);lineEdit->setText("Hello world");QPushButton* pushbutton = new QPushButton(this);pushbutton->setText("Hello qt");connect(ui->pushButton,&QPushButton::clicked,this,&Widget::headle);}

当我们多次点击按钮:

我们也可以用来修改文本内容,可以实现点击按钮,切换两个文本的这个功能,函数就可以写为:

void Widget::Headle()
{if(pushbutton->text() == "Hello world")pushbutton->setText("Hello qt!");elsepushbutton->setText("Hello world");
}

如果我们是在ui界面拖拽的控件,那么对应应该是ui->pushbutton,它的name从这里看即可:

在QObject会为每一个拖拽出来的控件分配名字,咱们也可以自己编辑。


小小的总结

可能到这里部分同学看的是比较乱的,我们不妨简单总结一下。

如果是纯代码的方式:

那么我们需要在widget这个类里面添加我们需要connect的对象:

class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void Headle();
private:Ui::Widget *ui;QPushButton* pushbutton;
};

不然我们访问构造函数的时候,该成员都不存在我们如何访问?

如果是图形化的方式:

不少同学是会疑惑,为什么我们需要使用Ui指针,凭什么ui指针里面有它?

我们不妨看看ui指针的类型:

private:Ui::Widget *ui;QPushButton* pushbutton;

它是Ui命名空间域里面的widget类型,那么我们在ui文件生成的头文件里面看:

会发现Ui命名空间域里面有一个类,叫做Widget,继承Ui_Widget,那么Ui_Widget这个类,是通过ui文件通过qmake自动生成的,发现里面有我们刚才拖拽的button,这是不是就说得通了?

算是简单理解了一下纯代码方式和图形化方式的一个区别。


坐标系

关于坐标系非常简单:

不同于数学中的坐标系,这里面的坐标系是这样的,并且坐标是基于自己的父类:

通过使用函数move即可修改。

小知识:坐标系背后的单位是像素点。


感谢阅读!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词