在这里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)
现在的问题是在此之后我不知道该怎么办了。 我尝试过的:
nmake release-install
,是的!当我尝试运行时,它在qt Designer BUT中可见,但出现错误dependent 'custompage.h' does not exist.
。因此,我尝试将pri添加到项目中,但是,如果我将custompage.h的副本添加到项目中,则它确实可以正常工作。但是在我看来,这是不希望的(特别是因为我还需要添加自定义页面包含的标头)。 那么定义完整个项目后应该怎么做?
一个可能很重要的细节。我项目的位置在“文档”文件夹中。