如何在QT中将子窗口小部件属性添加到“自定义设计器窗口小部件”?

时间:2020-10-19 18:01:21

标签: c++ qt

我已经使用“其他项目”->“ Qt自定义设计器小部件”向导创建了一个自定义设计器小部件。

我一直在玩它,而且似乎无法弄清楚如何向我的定制设计器小部件中添加子小部件属性。这可能吗?

我添加了一个“ QTableWidget”和两个按钮。然后,我编译了小部件并将DLL移到我的Qt环境中。它已正确加载,并且在添加自定义窗口小部件时可以看到表格窗口小部件和按钮。但是,我无法更改“ QTableWidget”和两个“ QPushButton”的属性。理想情况下,我可以上推这些属性,以便设计人员在添加自定义窗口小部件时可以访问它们。那是我迷路的地方,我在网上找不到任何东西(也许我在搜索时使用了错误的单词...)。

EditableTableWidget.h

#ifndef EDITABLETABLEWIDGET_H
#define EDITABLETABLEWIDGET_H

#include <QDialog>

namespace Ui {
class EditableTableWidget;
}

class EditableTableWidget : public QDialog
{
    Q_OBJECT

public:
    explicit EditableTableWidget(
            QWidget *parent = nullptr);

    ~EditableTableWidget();

private:
    Ui::EditableTableWidget *ui;
};

#endif // EDITABLETABLEWIDGET_H

EditableTableWidget.cpp

#include "EditableTableWidget.h"
#include "ui_EditableTableWidget.h"

EditableTableWidget::EditableTableWidget(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::EditableTableWidget)
{
    ui->setupUi(this);
}

EditableTableWidget::~EditableTableWidget()
{
    delete ui;
}

EditableTableWidget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>EditableTableWidget</class>
 <widget class="QDialog" name="EditableTableWidget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>280</width>
    <height>240</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QTableWidget" name="TableWidget">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>261</width>
     <height>192</height>
    </rect>
   </property>
  </widget>
  <widget class="QPushButton" name="AddRowBtn">
   <property name="geometry">
    <rect>
     <x>190</x>
     <y>210</y>
     <width>80</width>
     <height>21</height>
    </rect>
   </property>
   <property name="text">
    <string>Add Row</string>
   </property>
  </widget>
  <widget class="QPushButton" name="DeleteRowBtn">
   <property name="geometry">
    <rect>
     <x>100</x>
     <y>210</y>
     <width>80</width>
     <height>21</height>
    </rect>
   </property>
   <property name="text">
    <string>Delete Row</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

EditableTableWidgetWidgetPlugin.h

#ifndef EDITABLETABLEWIDGETPLUGIN_H
#define EDITABLETABLEWIDGETPLUGIN_H

#include <QDesignerCustomWidgetInterface>

class EditableTableWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
{
    Q_OBJECT
    Q_INTERFACES(QDesignerCustomWidgetInterface)
#if QT_VERSION >= 0x050000
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
#endif // QT_VERSION >= 0x050000

public:
    EditableTableWidgetPlugin(QObject *parent = 0);

    bool isContainer() const;
    bool isInitialized() const;
    QIcon icon() const;
    QString domXml() const;
    QString group() const;
    QString includeFile() const;
    QString name() const;
    QString toolTip() const;
    QString whatsThis() const;
    QWidget *createWidget(QWidget *parent);
    void initialize(QDesignerFormEditorInterface *core);

private:
    bool m_initialized;
};

#endif // EDITABLETABLEWIDGETPLUGIN_H

EditableTableWidgetWidgetPlugin.cpp

#include "EditableTableWidget.h"
#include "EditableTableWidgetPlugin.h"

#include <QtPlugin>

EditableTableWidgetPlugin::EditableTableWidgetPlugin(QObject *parent)
    : QObject(parent)
{
    m_initialized = false;
}

void EditableTableWidgetPlugin::initialize(QDesignerFormEditorInterface * /* core */)
{
    if (m_initialized)
        return;

    // Add extension registrations, etc. here

    m_initialized = true;
}

bool EditableTableWidgetPlugin::isInitialized() const
{
    return m_initialized;
}

QWidget *EditableTableWidgetPlugin::createWidget(QWidget *parent)
{
    return new EditableTableWidget(parent);
}

QString EditableTableWidgetPlugin::name() const
{
    return QLatin1String("EditableTableWidget");
}

QString EditableTableWidgetPlugin::group() const
{
    return QLatin1String("");
}

QIcon EditableTableWidgetPlugin::icon() const
{
    return QIcon();
}

QString EditableTableWidgetPlugin::toolTip() const
{
    return QLatin1String("");
}

QString EditableTableWidgetPlugin::whatsThis() const
{
    return QLatin1String("");
}

bool EditableTableWidgetPlugin::isContainer() const
{
    return false;
}

QString EditableTableWidgetPlugin::domXml() const
{
    return QLatin1String("<widget class=\"EditableTableWidget\" name=\"editableTableWidget\">\n</widget>\n");
}

QString EditableTableWidgetPlugin::includeFile() const
{
    return QLatin1String("EditableTableWidget.h");
}
#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(EditableTableWidgetPlugin, EditableTableWidgetPlugin)
#endif // QT_VERSION < 0x050000

0 个答案:

没有答案