前言

下载安装了几次QT,因为不学都删除了。今天又打算下载,可是在线的安装程序运行总卡在2%~3%,说什么存档有问题,连接不了什么的。然后去找离线的安装包,怎么也下载不了。我的游览器也该换了,虽然是谷歌游览器,也许不是正统的谷歌。搜索出的都是些垃圾,怎么也解决不了我的问题。后来加了一个QQ群,从里面得到消息去关注个微信公众号,终于人家给了我答案——像这种国内难以访问的,有时会有国内的相关网站,而QT的国内网站就是QTCN

终于下载下来了。我之前把VS2017换成了VS2019,我想这个2019的也能给QT提供编译器支持吧。可是不行。

于是我把QT又删除了,打算直接装MinGW64,看到十几个G的大小我他妈。早知道不删除QT了,直接把VS2019换成VS2017就行了~

我他妈傻逼。


在有VS2017的情况下,下载安装完QT后,打开QTCreator。

但是此时仍然是不能运行的,需要进行配置——构建套件
工具 → \rightarrow 选项 → \rightarrow Kits
配置成下面这样,只要没有红色警告就行了
在这里插入图片描述

新建一个工程Qt Widget Application,有以下的文件结构,
在这里插入图片描述
要熟悉的.ui文件就是这个mainwindow.ui

双击这个文件会打开这样一个编辑窗口,
此时左边框显示在设计状态
在这里插入图片描述
怎么说呢?这个熟悉当然是自己随便乱搞一通啦(一位懒惰的刀塔客如是说)

.pro是项目的管理文件,不用自己编辑。

如果你创建的是XXX项目,那么头文件XXX.h里就有一个XXX类,这类里包含一个同名的ui 命名空间下的组合类,在利用 XXX 类操控 UI 时,实际上在操控另一个被封装的类。
大概是下面这样的结构:
在这里插入图片描述

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

MainWindow::~MainWindow()
{
    delete ui;
}
//main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
//ui_mainwindow.h
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.12.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QMenuBar *menuBar;
    QMenu *menuMyWin;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(400, 300);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        MainWindow->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 400, 23));
        menuMyWin = new QMenu(menuBar);
        menuMyWin->setObjectName(QString::fromUtf8("menuMyWin"));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        MainWindow->setStatusBar(statusBar);

        menuBar->addAction(menuMyWin->menuAction());

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", nullptr));
        menuMyWin->setTitle(QApplication::translate("MainWindow", "MyWin", nullptr));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

这样的好处就是可以通过同一个类控制Ui_XXX和XXX,让人感觉不到Ui_XXX这个UI编辑类的存在。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐