制作Qt自定义设计器小部件的步骤

时间:2019-10-30 13:51:18

标签: c++ qt visual-c++ qt5

在这里How to split large qmainwindow code (if necessary)?回答我的问题之后,我现在确实想使用自定义小部件,但是我遇到了麻烦。我试图将按钮,标签和treewidget做成一个小部件。基本上是因为这组小部件的信号插槽处理通常是相同的。因此,如果自定义窗口小部件中已经定义了大部分信号插槽处理,则将节省代码。

我知道有很多教程,但是似乎没有一个完整的教程可供我遵循。

到目前为止,我已经做了什么。使用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开发人员并运行nmake release-install,是的!当我尝试运行时,它在qt Designer BUT中可见,但出现错误dependent 'custompage.h' does not exist.。因此,我尝试将pri添加到项目中,但是,如果我将custompage.h的副本添加到项目中,则它确实可以正常工作。但是在我看来,这是不希望的(特别是因为我还需要添加自定义页面包含的标头)。

那么定义完整个项目后应该怎么做?

一个可能很重要的细节。我项目的位置在“文档”文件夹中。

0 个答案:

没有答案
相关问题