Что делать с файлом .h, созданным с помощью файла .ui? - PullRequest
1 голос
/ 21 февраля 2020

Я использовал QT Desginer для создания файла finalversion_with_buttons.ui, позже я преобразовал его в файл finalversion_with_buttons.h, используя команду

uic -o finalversion_with_buttons.h finalversion_with_buttons.ui

в командной строке.

Я узнал что у нас не может быть файла. cpp, а файл .h содержит все, что нам нужно, теперь как мне выполнить / запустить этот файл .h?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Всегда полезно создать файл ".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? "

  1. , как сказано выше, просто используйте создатель qt и нажмите Run или crtl + R (он бесплатный для open source и edu)
  2. создайте файл проекта, подобный приведенному выше, и используйте qmake SampleProject.pro в командной строке. Это создаст файл с именем «Makefile» в каталоге проекта. (как описано здесь https://vitux.com/compiling-your-first-qt-program-in-ubuntu/, затем введите команду make в том же каталоге (также описано здесь )
  3. Создайте файл make, как описано в ссылке 1 и 2 .
  4. Все остальное выходит за рамки этого вопроса, такие как выяснение семанти c для использования g cc или g ++

При этом вы можете создавать QPushButtons и все остальное с помощью создателя qt, или вы можете создавать кнопки pu sh просто в коде, не используя .ui xml - файл, как описано здесь : https://www.bogotobogo.com/Qt/Qt5_LayoutNotUsingDesigner.php

Но то, что все парни здесь настоятельно рекомендуют, таково: приобретите себе книгу или учебник по goot qt / c ++ и изучите основы классов и qt, и вы станете действительно Хороший программист в кратчайшие сроки. Я также очень надеюсь, что этот пост сможет прояснить для вас много вопросов по программированию / компиляции на qt, и вы начнете получать удовольствие и будете создавать действительно хорошие приложения :) Cheers

0 голосов
/ 23 февраля 2020

Пожалуйста, проверьте документацию Qt Creator, например, " Создание приложения на основе виджета Qt ". Он даст вам некоторое представление о том, как настроить проект qmake / CMake на основе файлов форм пользовательского интерфейса (также называемых виджетами Qt). Файлы UI сами по себе не могут использоваться автономно. Это только описание интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...