写在最前:一个辣鸡小白的无聊流水账自述
上午的工作
搭建VS+Qt工作环境,并且添加番茄助手。
下载了VS2017版本(基于c++),Qt5.13.0 添加了这几个插件mingw73_32,mingw73_64,msvc2017,msvc2017_64, QtWebEngine (以防之后项目会用到),番茄助手2017破解版
下午的工作
熟悉Qtcreator和VS+Qt的工作环境
在使用Qtcreator运行简单测试程序时,发现错误报错信息
可能原因:由于下载Qt时或保存项目时未按照默认路径保存,该问题与环境变量有关
此后,初步了解widget类,先在Qtcreator中写简单程序,更改窗口名称。
主函数中无需过多编写代码,主要工作代码应在构造函数中完成
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);//指针创建,内存空间还未创建 指针空间分配到堆空间
qDebug()<<"Hello Qt!";
}
int main(int argc, char *argv[])//所有c++程序的入口
//argc是参数个数的计数值参数,*argv[]是参数列表的字符串,另一种方式是二级指针char **argv
{
QApplication a(argc, argv);//一个qt程序,有且仅有一个应用程序类,a是调用构造函数建立的一个对象
Widget w;//建立一个widget类的对象w
w.show();//调用widget类的对象成员函数 show()将窗口w显示出来
return a.exec();//返回a对象的exec方法, exec()称为事件阻塞函数(卡在这相当于system("pause"),
//并收集鼠标的所有操作,点击、移动)
}
初步了解widget类和窗口程序之后,开始VS的学习
在使用番茄助手时一度发现有很多功能不能使用,可能是破解版本的问题吧……
还是个小白,对番茄助手的很多功能都不太熟悉,以后的学习再慢慢来吧……
main.cpp
#include "QtGuiApplication1.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtGuiApplication1 w;
return a.exec();
}
QtGuiApplication1.h
#pragma once
#pragma execution_character_set("utf-8")
#include <QtWidgets/QWidget>
#include "ui_QtGuiApplication1.h"
#include<QPushButton>
#include<QLineEdit>
#include<QTextEdit>
class QtGuiApplication1 : public QWidget
{
Q_OBJECT
public:
QtGuiApplication1(QWidget *parent = Q_NULLPTR);
private:
Ui::QtGuiApplication1Class ui;
QPushButton b0;
QPushButton b1;
QTextEdit te;
QLineEdit lineEdit1;
};
QtGuiApplicaiton1.cpp
#pragma execution_character_set("utf-8")
#include "QtGuiApplication1.h"
#include<QPushButton>
#include<QLineEdit>
#include<QTextEdit>
QtGuiApplication1::QtGuiApplication1(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
this->setWindowTitle("你好QT!");
//定义一个按钮
QPushButton b0(this);//按钮的构造函数可以定义 &w将父函数的指针赋给它
//采用的是构造函数中填入父对象地址的方式
b0.setText("777");
//b0.show();
QPushButton b1;//没有指定父对象的按钮
//采用成员函数的方式设置父对象
b1.setParent(this);
b1.setText("社会程序员");
b1.move(0, 100);
//b1.show();//由于没有指定父对象,所以按钮b1单独显示
//以上为2中方法设置对象的父对象
QLineEdit lineEdit1(this);//行编辑器
lineEdit1.move(100, 100);
lineEdit1.setText("社会主义好!");
QTextEdit te(this);
te.setText("中国人民真争气");
te.move(100, 200);
this->show();
}
其实最开始老师为了我们方便理解 这段放在构造函数里的代码是放在main函数里的,放在main函数里的时候一切运行正常,结果等把这段修改到cpp里的时候就开始报错了……老师的也各种报错,但是和我的错误不一样,po一下自己的错误叭
老师说是又跟Qt的安装路径有关……(合着今天下午的错误全跟路径杠上了,可我觉得好像当时下Qt的时候是按默认路径装的啊……行吧,以后涉及到Qt全用默认路径)
后来老师的错误也一直没解决掉,于是语重心长地说,重写一遍代码比调试错误的时间还是更短的,于是又开了个项目……
QtGuiApplication.h
#pragma once
#pragma execution_character_set("utf-8")
#include <QtWidgets/QWidget>
#include "ui_QtGuiApplication1.h"
#include<QPushButton>
#include<QLineEdit>
#include<QTextEdit>
class QtGuiApplication1 : public QWidget
{
Q_OBJECT
public:
QtGuiApplication1(QWidget *parent = Q_NULLPTR);
void clearte();
void react();
private:
Ui::QtGuiApplication1Class ui;
QPushButton b0;
QPushButton* b1;
QTextEdit* te;
QLineEdit* le;
};
QtGuiApplication.cpp
#include "QtGuiApplication1.h"
QtGuiApplication1::QtGuiApplication1(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
b0.setParent(this);
b0.setText("按钮一");
b1 = new QPushButton("我是按钮2", this);
b1->setParent(this);
//b1->setText("按钮2");
b1->move(0, 100);
le = new QLineEdit(this);
te = new QTextEdit(this);
le->move(150, 0);
te->move(150, 100);
le->setText("改革春风吹满地");
te->setText("中国人民真争气");
//connect(信号的发出者,信号分类,信号的接收者,槽函数)
connect(b1, &QPushButton::clicked, this, &QtGuiApplication1::close);
connect(&b0, &QPushButton::pressed, this, &QtGuiApplication1::clearte);
connect(&b0, &QPushButton::released, this, &QtGuiApplication1::react);
}
void QtGuiApplication1::clearte()
{
le->setText("");
te->setText("");
}
void QtGuiApplication1::react()
{
le->setText("改革春风吹满地");
te->setText("中国人民真争气");
}
平平淡淡的main函数……
#include "QtGuiApplication1.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtGuiApplication1 w;
w.show();
return a.exec();
}
其实到最后还是报错,就是上面的Qt5cored.dll和Qt5widget.dll……但是试了一堆方法最后还是改了环境变量,之后发现……
之前打开这个项目一直是打开文件夹,后来改成直接打开项目project,结果发现欸跑出来了……行吧真争气
睡了睡了,这都要第二天了
补充:今早用这种方法再次打开第三个程序,发现它也跑得起来……