Всегда полезно создать файл ".pro" или ".cmake", который включает в себя все, что нужно для компиляции проекта, что имеет несколько преимуществ, даже для небольших программ. Я настоятельно рекомендую ознакомиться с этими сайтами, которые мне очень помогли при создании / компиляции проектов: https://www.cprogramming.com/tutorial/makefiles.html https://www.cprogramming.com/tutorial/makefiles_continued.html
Это то, что автомат c сгенерированный .pro-файл создателя qt содержит, и, я думаю, самоочевидный:
QT += core gui multimedia multimediawidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
mainwindow.qrc
Если вы работаете с конструктором qt создателя qt, вы получите этот xml .ui файл и самый простой Чтобы скомпилировать его, просто нажмите Build-> Run или ctrl + R. Если ваш .pro-файл похож на приведенный выше пример с правильными именами файлов, вам следует подойти к go.
На самом деле можно иметь только файл c ++ и никаких заголовочных файлов - это было изобретено для создания проекты более модульные с классами - вот что такое c ++ по сравнению с c. Процитируем Бьярне: «Классы используют, чтобы скрыть уродливые вещи» .. поэтому вы можете читать программу и понимать ее, даже не зная, что файлы классов содержат и делают с вашим кодом с правильной ссылкой, и вам не нужно заботиться , И это то, что делает qt - скрывая уродливые вещи, которые вам придется делать самостоятельно в его классах, чтобы вы могли просто вызвать QPushButton, и это работает. (и многие другие преимущества, но для простоты, qt - это просто классы c ++)
Это пример для класса в коде без заголовочного файла:
[//example from here https://www.cprogramming.com/tutorial/lesson12.html][1]
#include <iostream>
using namespace std;
class Computer // Standard way of defining the class
{
public:
// This means that all of the functions below this(and any variables)
// are accessible to the rest of the program.
// NOTE: That is a colon, NOT a semicolon...
Computer();
// Constructor
~Computer();
// Destructor
void setspeed ( int p );
int readspeed();
protected:
// This means that all the variables under this, until a new type of
// restriction is placed, will only be accessible to other functions in the
// class. NOTE: That is a colon, NOT a semicolon...
int processorspeed;
};
// Do Not forget the trailing semi-colon
Computer::Computer()
{
//Constructors can accept arguments, but this one does not
processorspeed = 0;
}
Computer::~Computer()
{
//Destructors do not accept arguments
}
void Computer::setspeed ( int p )
{
// To define a function outside put the name of the class
// after the return type and then two colons, and then the name
// of the function.
processorspeed = p;
}
int Computer::readspeed()
{
// The two colons simply tell the compiler that the function is part
// of the class
return processorspeed;
}
int main()
{
Computer compute;
// To create an 'instance' of the class, simply treat it like you would
// a structure. (An instance is simply when you create an actual object
// from the class, as opposed to having the definition of the class)
compute.setspeed ( 100 );
// To call functions in the class, you put the name of the instance,
// a period, and then the function name.
cout<< compute.readspeed();
// See above note.
}
И компилятор не видит что-то еще после того, как компоновщик сделан, чем это. поэтому
«Я узнал, что у нас не может быть файла. cpp, а файл .h содержит все, что нам нужно»
не так, потому что вы можете видно в примере выше. Просто не следует использовать c ++ (или c с классами, как это называлось в первые дни).
Но чтобы ответить на ваш вопрос:
"как мне выполнить / запустить этот файл .h? "
- , как сказано выше, просто используйте создатель qt и нажмите Run или crtl + R (он бесплатный для open source и edu)
- создайте файл проекта, подобный приведенному выше, и используйте
qmake SampleProject.pro
в командной строке. Это создаст файл с именем «Makefile» в каталоге проекта. (как описано здесь https://vitux.com/compiling-your-first-qt-program-in-ubuntu/, затем введите команду make
в том же каталоге (также описано здесь ) - Создайте файл make, как описано в ссылке 1 и 2 .
- Все остальное выходит за рамки этого вопроса, такие как выяснение семанти c для использования g cc или g ++
При этом вы можете создавать QPushButtons и все остальное с помощью создателя qt, или вы можете создавать кнопки pu sh просто в коде, не используя .ui xml - файл, как описано здесь : https://www.bogotobogo.com/Qt/Qt5_LayoutNotUsingDesigner.php
Но то, что все парни здесь настоятельно рекомендуют, таково: приобретите себе книгу или учебник по goot qt / c ++ и изучите основы классов и qt, и вы станете действительно Хороший программист в кратчайшие сроки. Я также очень надеюсь, что этот пост сможет прояснить для вас много вопросов по программированию / компиляции на qt, и вы начнете получать удовольствие и будете создавать действительно хорошие приложения :) Cheers