Интерфейс от прочего обычно отделяется. Сделай свой MyClass наследником от QWidget. Создай дополнительный gui-класс, с названием, например, Ui_MyClass, в который ты передашь указатель на сам MyClass. Чтоб Ui_MyClass автоматически почистился при удалении MyClass унаследуй его от QObject (если не хочешь чистить ui в деструкторе MyClass'a). Слот необязательно должен быть в секции private, это по обстоятельствам. Макрос Q_OBJECT в каждом своём классе объявлять тоже необязательно, но в любом случае нужен, когда в классе используются сигнал-слот связи, tr() и т.п. Примерный код (не проверял, но идея должна быть ясна):
MyClass.h
C++ (Qt)
#include <QWidget>
class Ui_MyClass;
class MyClass: public QWidget
{
Q_OBJECT
public:
MyClass(QWidget* parent = 0);
private:
Ui_MyClass* ui;
private slots:
void myslot(int _id);
};
MyClass.cpp
C++ (Qt)
#include "MyClass.h"
#include "Ui_MyClass.h"
MyClass::MyClass(QWidget* parent = 0): QWidget(parent),
ui(new Ui_MyClass(this))
{
this->ui->setupUi(this);
connect(this->ui->bGroup, SIGNAL(buttonPressed(int)), SLOT(myslot(int)));
}
void MyClass::myslot(int _id)
{
//...
}
Ui_MyClass.h (гуй на .h/.cpp обычно не разделяется):
C++ (Qt)
#include <QHBoxLayout>
#include <QButtonGroup>
#include <QRadioButton>
#include "MyClass.h"
class Ui_MyClass: public QObject
{
Q_OBJECT
MyClass* dialog;
public:
Ui_MyClass(QObject* parent = 0): QObject(parent),
dialog(0) { }
QHBoxLayout* hLayout;
QButtonGroup* bGroup;
QRadioButton *rButton1,
*rButton2;
void setupUi(MyClass* _dialog)
{
this->dialog = _dialog;
this->hLayout = new QHBoxLayout;
this->bGroup = new QButtonGroup(this);
this->rButton1 = new QRadioButton;
this->rButton2 = new QRadioButton;
this->hLayout->addWidget(this->rButton1);
this->hLayout->addWidget(this->rButton2);
this->bGroup->addButton(this->rButton1, 0);
this->bGroup->addButton(this->rButton2, 1);
this->dialog->setLayout(this->hLayout);
}
};
main.cpp
C++ (Qt)
#include "MyClass.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyClass myObj;
myObj.show();
return app.exec();
}
Конечно можно ещё отметить, что главный класс, в твоём случае это MyClass, желательно организовывать как singleton, но до этого ещё успеешь дойти.
И ещё правильно понимай когда надо передавать в виджет парента, а когда не надо. Если виджет создан в куче (через new), и при этом ему передан parent, то это гарантия его зачистки при удалении parent'a. Это относится только к Qt (у них своеобразная реализация garbage collector'a за счёт фиксирования каждого потомка в QObjectList'e предка), в самописных классах на каждый new приходился бы свой delete. В данном случае для лайаута родителя передавать не надо, т.к. он ему будет назначен методом setLayout. Поскольку другие виджеты получили родителя методом addWidget() лайаута, то при их создании указывать парента не обязательно, а вот для QButtonGroup - надо.