#include <QWidget>#include<ui_widget.h>namespace Ui {class Widget;}class PreviewFrame;class Widget : public QWidget{ Q_OBJECT public: explicit Widget(QWidget *parent=0); ~Widget(); // virtual void iLoad(); Хочется сделать ее виртуальнойprivate: Ui::Widget *ui; PreviewFrame * ptrWiget;public slots: void MySlot();};
#include<widget.h>============class PreviewFrame : public QFrame // А хочется public Widget{ Q_OBJECTpublic: explicit PreviewFrame(QWidget *parent); void iLoad(); QImage img;protected: void paintEvent(QPaintEvent *event);Qframe * ptrFrame;private:};
namespace Ui {class SomeClass; }
C++ (Qt)using Ui::Widget;
namespace Ui {class PreviewFrame; ==========private: Ui::PreviewFrame *ui2;}
class Widget;}class PreviewFrame;class CommonPlase;class Widget : public QWidget{ Q_OBJECT public: explicit Widget(QWidget *parent=0); ~Widget();private: Ui::Widget *ui; PreviewFrame * ptrWiget; CommonPlase * ptrPlase;public slots: void MySlot();};Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); ptrPlase=new PreviewFrame(ui->frame); ptrPlase->iLoad(); qDebug() << ui->frame->parent(); qDebug() << ui->pushButton->parent(); QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MySlot()));}void Widget::MySlot(){ qDebug() << ui->frame->geometry(); // QRect rec(QPoint(0,0), QSize(200,200)); ptrWiget->setGeometry(ui->frame->geometry()); // Ошибка здесь!!!! ptrWiget->update();}Widget::~Widget(){ delete ui;}
#ifndef COMMONPLASE_H#define COMMONPLASE_H//#include <QObject>class CommonPlase{public: CommonPlase(); // ~CommonPlase(); virtual void iLoad()=0;};#endif // COMMONPLASE_H#ifndef PREVIEWFRAME_H#define PREVIEWFRAME_H#include <QWidget>#include <widget.h>#include<QFrame>#include<QPainter>#include<ui_widget.h>#include"commonplase.h"namespace Ui {class PreviewFrame;//using Ui::Widget;}class PreviewFrame : public QFrame, public CommonPlase{ Q_OBJECTpublic: explicit PreviewFrame(QWidget *parent); void iLoad(); // Виртуальная QImage img; PreviewFrame *ptrPreviewFrame;protected: void paintEvent(QPaintEvent *event);private: //Ui::PreviewFrame *ui2;};#endif // PREVIEWFRAME_H#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include<previewframe.h>#include<ui_widget.h>namespace Ui {class Widget;}class PreviewFrame;class CommonPlase;class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent=0); ~Widget();private: Ui::Widget *ui; PreviewFrame * ptrWiget; //friend class PreviewFrame; CommonPlase * ptrPlase;public slots: void MySlot();};#endif // WIDGET_H// Для ясности выкладываю конструктор WidgetWidget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); ptrPlase=new PreviewFrame(ui->frame); ptrPlase->iLoad(); qDebug() << ui->frame->parent(); qDebug() << ui->pushButton->parent(); QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MySlot()));}void Widget::MySlot(){ qDebug() << ui->frame->geometry();/*По логике вещей, если внутри слота ptrWiget = new PreviewFrame(ui->frame), томы получим два указателя на объекты потомки frame(По объектной модели qt) И второй отрисует изображение поверх первого, при клике.А два объекта вроде как не нужно......*/ ptrWiget->setGeometry(ui->frame->geometry()); ptrWiget->update();}
хочу сделать обработку кадров. На форме будет показываться кадр и слева будет выбор эффектов.