В Qt Designer, когда я продвигаю Widget, у меня возникают некоторые проблемы с файлами ui _ *. H и включением заголовков продвигаемого класса.Проблема возникает в Linux, где заголовки повышенного класса не найдены.В Windows с MSVC 2017 нет проблем ...
В Windows я указываю относительный путь из папки * .ui.
В Linux кажется, что я должен поставитьродственник из папки * .pro ... не очень хорошо, если мне нужно повторно использовать виджет в другом проекте, но он работает
Кто-нибудь может объяснить?
Спасибо!
РЕДАКТИРОВАТЬ:
Я добавил пример кода ниже.
Вам нужен сгенерированный файл ui_?
Вы можете увидеть на этом последнем файле, чтопуть к mycombobox.h является относительным из корневой папки, а не из папки * .ui.
Эта конфигурация, похоже, работает и под Windows, но я бы хотел указать относительный путь из *.Пользовательский файл.
Структура моей папки:
in the root :
main.cpp
mainWindows.h
mainwindows.cpp
/Folder1 :
MyComboBox.h
/Folder1/Folder2 :
Form.h
Form.cpp
Файл main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Файл mainwindows.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QHBoxLayout>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
mainwindows.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "folder1/folder2/form.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
centralWidget()->setLayout(new QHBoxLayout);
centralWidget()->layout()->addWidget(new Form);
}
MainWindow::~MainWindow()
{
delete ui;
}
/folder1/MyComboBox.h
#ifndef MYCOMBOBOX_H
#define MYCOMBOBOX_H
#include <QComboBox>
class MyComboBox:public QComboBox
{
Q_OBJECT
public:
MyComboBox(QWidget* parent=nullptr):QComboBox(parent)
{
addItem("My ComboBox");
}
virtual ~MyComboBox() {}
};
/folder1/folder2/Form.h
#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public:
explicit Form(QWidget *parent = nullptr);
~Form();
private:
Ui::Form *ui;
};
Файл /folder1/folder2/Form.cpp
#include "form.h"
#include "ui_form.h"
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
}
Form::~Form()
{
delete ui;
}
И, наконец, файл Form.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="MyComboBox" name="comboBox"/>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>MyComboBox</class>
<extends>QComboBox</extends>
<header>folder1/mycombobox.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>