Шаги, чтобы сделать виджет QT Custom Designer - PullRequest
0 голосов
/ 30 октября 2019

Следуя моему вопросу здесь Как разбить большой код qmainwindow (если необходимо)? , теперь я действительно хочу использовать пользовательские виджеты, но я застрял. Я пытаюсь сделать кнопки, метку и виджет как один виджет. В основном потому, что обработка слотов сигналов обычно одинакова для этой группы виджетов. Таким образом, будет сохранен код, если большая часть обработки сигнальных слотов уже определена в пользовательском виджете.

Я знаю, что есть много учебных пособий, но ни одно из них не является достаточно полным, чтобы я мог их выполнить.

Итак, что я сделал до сих пор. Используя qt creator, я создал новый проект: Other Project> Qt Custom Designer Widget. И определил виджет. Я дам здесь только MWE заголовочного файла.

#ifndef CUSTOMPAGE_H
#define CUSTOMPAGE_H

#include <QWidget>
#include <QDesignerExportWidget>
#include <QTreeWidget>
#include <QTimer>
#include <QtSql/QSqlDatabase>
#include "ui_custompage.h"
#include "ExistingDialog.h"

#include "QTreeWidgetItemComboBox.h"
#include "QTreeWidgetItemSpinBox.h"
#include "QTreeWidgetItemLineEditDouble.h"

class QDESIGNER_WIDGET_EXPORT CustomPage : public QWidget
{
    Q_OBJECT
    Q_PROPERTY( int type MEMBER type_)

public:
    CustomPage(QWidget *parent = nullptr);
    ~CustomPage();

signals:
    //Some signals

private slots:
    //Some slots of the form
    void on_pushButton1_clicked();
    //or
    void on_treeWidget_itemDoubleClicked(QTreeWidgetItem* treeItem, int column);

private:
    //some functions

private:
    Ui::CustomPage ui;
    int type_;
};

#endif // CUSTOMPAGE_H

Я знаю, что заголовок и источник плагина всегда одинаковы (за исключением некоторых имен), поэтому я не буду показывать вам их (ядействительно добавил имя для группы).

Как видно из заголовка виджета, у меня есть несколько включений, поэтому я использовал концепцию .pri. Файл .pro плагина выглядит следующим образом (я внес в него одно изменение):

CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(custompageplugin)
TEMPLATE    = lib

HEADERS     = custompageplugin.h
SOURCES     = custompageplugin.cpp
RESOURCES   = icons.qrc
LIBS        += -L. 

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += designer widgets sql //I added sql myself
} else {
    CONFIG += designer
}

target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target

include(custompage.pri)

Проблема сейчас в том, что после этого я не знаю, что делать дальше. Что я пробовал:

  • Создайте проект, откройте новый проект, откройте форму нового проекта с помощью qt designer и посмотрите, есть ли мой пользовательский виджет в списке. :( это не так.
  • Создайте проект, откройте vs developer и запустите nmake release-install, ДА! Это видно в Qt Designer, НО, когда я пытаюсь запустить, я получаю ошибку dependent 'custompage.h' does not exist.. Поэтому япопытался добавить pri в проект, но это не работает, если я добавляю копию custompage.h в проект, который он работает. Но мне кажется, что это нежелательно (тем более, что мне нужно добавить также заголовок, которыйвключены пользовательской страницей).

Итак, что вы должны сделать после того, как определили полный проект?

Одна деталь, которая может быть важной. Местоположение моего проекта находится в папке «Документы».

...