Проще говоря, я хочу новый класс, который расширяет созданный мной пользовательский виджет и, таким образом, имеет полный доступ к его пользовательскому интерфейсу.
До сих пор я пробовал несколько различных методов, основанных на том, как обычно можно создавать подклассы / расширять классы, но я почему-то ужасно терплю неудачу по многим различным причинам.
Кроме того, простое использование моего виджета в качестве члена в моем новом классе не подойдет для этой ситуации.
Может кто-нибудь проиллюстрировать быстрый пример того, как я это сделаю? Я сделал кучу поисков, но я не могу найти какие-либо хиты, касающиеся именно того, что я пытаюсь сделать
Если все остальное не поможет, я просто скопирую код и создаю новый виджет, который технически сэкономил бы мне много времени, но это было бы неправильно делать.
Моим первым инстинктом было сделать что-то подобное ( Qwe
быть моим новым классом, Asd
будучи виджетом):
class Qwe : Asd {public: ...}
И я даже сделал пользовательский интерфейс виджета общедоступным, но потом только что получил ошибку:
использование неопределенного типа Ui :: Asd
всякий раз, когда я пытался получить доступ к элементам пользовательского интерфейса.
Допустим, у нас есть собственный виджет с именем BaseWidget
и дочерний виджет с именем ChildWidget
, декларировать BaseWidget
как обычно, но сделай свое ui
член защищен вместо частного, вот так:
protected:
Ui::BaseWidget *ui;
декларировать ChildWidget
как обычный виджет, полученный из BaseWidget
, Убедитесь, что вы включили ui_BaseWidget.h
в ChildWidget.cpp
файл, так же, как вы делаете это в BaseWidget.cpp
(это включает и сам заголовок генерируется Qt).
Заголовок:
#include "BaseWidget.h"
class ChildWidget : public BaseWidget {
Q_OBJECT
public:
explicit ChildWidget(QString text, QWidget *parent = 0);
};
Источник:
#include "ChildWidget.h"#include "ui_BaseWidget.h"
ChildWidget::ChildWidget(QString text, QWidget *parent) :
BaseWidget(parent)
{
ui->label->setText(text);
}