crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> создание виджетов в ходе работы программы
eldar85
  опции профиля:
сообщение 3.12.2010, 19:25
Сообщение #11


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


отличненько, разобрался)

myPage::myPage(QString str, QWidget *parent) :
        QWidget(parent)
{
    textEdit = new QTextEdit;

    textBrowser = new QTextBrowser;
    groupBox = new QGroupBox(tr("WWW"));
    pushButon = new QPushButton(tr("Отправить"));

    pushButon->setShortcut(QKeySequence("CTRL+Return"));

    QVBoxLayout* layoutV = new QVBoxLayout;
    QHBoxLayout* layoutH = new QHBoxLayout;
    QVBoxLayout* mainLayout = new QVBoxLayout;
    layoutH->addStretch();
    layoutH->addWidget(pushButon);
    layoutV->addWidget(&webView);
    layoutV->addLayout(layoutH);
    layoutV->addWidget(textEdit);
    groupBox->setLayout(layoutV);
    mainLayout->addWidget(groupBox);
    connect(pushButon, SIGNAL(clicked()), this, SLOT(text()));

    url = str;

    setLayout(mainLayout);
}


====================================================
ui->tabWidget->addTab(new myPage("http://google.ru"), QString("Eldar "));


Сообщение отредактировал eldar85 - 3.12.2010, 19:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.12.2010, 19:28
Сообщение #12


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


молодец :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 3.12.2010, 19:48
Сообщение #13


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


Большое спасибо за помощь)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FantasyOr
  опции профиля:
сообщение 17.12.2010, 17:48
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


для eldar85


myPage::myPage()
{
pushButton = new QPushButton;
textEdit = new QTextEdit;
groupBox = new QGroupBox;
layoutV = new QVBoxLayout;
layoutV->addWidget(textEdit);
layoutV->addWidget(pushButton);
groupBox->setLayout(layoutV);
}

не забудь давать перентов элементам через new:

myPage::myPage()
{
pushButton = new QPushButton(this);
textEdit = new QTextEdit(this);
groupBox = new QGroupBox(this);
layoutV = new QVBoxLayout(this);
layoutV->addWidget(textEdit);
layoutV->addWidget(pushButton);
groupBox->setLayout(layoutV);
}

чтоб память руками не чистить в деструкторе, а то если и в деструкторе забудешь, то твоя прога будет беспощадно жрать память у очень общительных людей =)

Алексей1153 дело говорит:

myPage::myPage() унаследуй от QWidget, а не закладку добавляй свой класс.
Динамически это самое интересное
пример класса, который добавляется динамически:
class TAdditionalRouteWidget : public QWidget
{
    Q_OBJECT
public:
    TAdditionalRouteWidget(QWidget *parent = 0);
    ~TAdditionalRouteWidget();
             ...
             ...
signals:
    void deleteClick();
    void switchClick();
    void changedRoute();
private:
    QHBoxLayout *FLayout;
    QTextEdit *teAdditionalRoutes;
    QPushButton *btnDelRoute;
    QPushButton *btnSwitchRoute;
private slots:
    void slt_deleteClick();
    void slt_switchClick();
    void slt_changedRoute();
};


TAdditionalRouteWidget::TAdditionalRouteWidget(QWidget *parent)
    : QWidget(parent)
{
    FLayout = new QHBoxLayout(this);
    FLayout->setContentsMargins(0, 0, 0, 0);

    teAdditionalRoutes = new QTextEdit(this);

    btnDelRoute = new QPushButton(this);
    btnDelRoute->setStatusTip(tr("Удалить маршрут"));
    btnDelRoute->setIcon(QIcon(":/Resources/Recycle.png"));
    btnDelRoute->setIconSize(QSize(32, 32));

    btnSwitchRoute = new QPushButton(this);
    btnSwitchRoute->setStatusTip(tr("Сделать главным"));
    btnSwitchRoute->setIcon(QIcon(":/Resources/Switch.png"));
    btnSwitchRoute->setIconSize(QSize(32, 32));

    FLayout->addWidget(teAdditionalRoutes);
    FLayout->addWidget(btnSwitchRoute);
    FLayout->addWidget(btnDelRoute);
    FLayout->addStretch();

    teAdditionalRoutes->setFixedHeight(50);

    QObject::connect(btnDelRoute, SIGNAL(clicked()), this, SLOT(slt_deleteClick()));
    QObject::connect(btnSwitchRoute, SIGNAL(clicked()), this, SLOT(slt_switchClick()));
    QObject::connect(teAdditionalRoutes, SIGNAL(textChanged()), this, SLOT(slt_changedRoute()));

    setLayout(FLayout);
}


Пример динамического добавления и удаления класса:
процедура добавления нового виджета маршрута
{
    TAdditionalRouteWidget *ar = new TAdditionalRouteWidget(this);
    FRoutesLayout->insertWidget(FAdditionalRoutes.size(), ar);
    FAdditionalRoutes.push_back(ar);

    QObject::connect(ar, SIGNAL(deleteClick()), this, SLOT(slt_DelRoute()));
    QObject::connect(ar, SIGNAL(switchClick()), this, SLOT(slt_SwitchRoute()));
    QObject::connect(ar, SIGNAL(changedRoute()), this, SLOT(slt_ChangedRoute()));
}

процедура удаления виджета
slt_DelRoute()
{
    TAdditionalRouteWidget *ar = dynamic_cast<TAdditionalRouteWidget *>(sender());
    int idx = FAdditionalRoutes.indexOf(ar);
    if (idx != -1)
    {
        ar = FAdditionalRoutes.takeAt(idx);
        FRoutesLayout->removeWidget(ar);
        delete ar;
    }
}





в общем случае примерно так. Может топорно? профи критикуйте пожалуйста

Сообщение отредактировал FantasyOr - 18.12.2010, 13:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.12.2010, 18:54
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


FantasyOr, пользуйся кнопками/тэгами оформления кода.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 1:47