crossplatform.ru

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


  Ответ в создание виджетов в ходе работы программы
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 17.12.2010, 18:54
  FantasyOr, пользуйся кнопками/тэгами оформления кода.
FantasyOr Дата 17.12.2010, 17:48
  для 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;
    }
}





в общем случае примерно так. Может топорно? профи критикуйте пожалуйста
eldar85 Дата 3.12.2010, 19:48
  Большое спасибо за помощь)
Алексей1153 Дата 3.12.2010, 19:28
  молодец :)
eldar85 Дата 3.12.2010, 19:25
  отличненько, разобрался)

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 "));
Алексей1153 Дата 3.12.2010, 7:53
  не пойму, что ты делаешь. Зачем всё подряд вставляешь на таб ? На таб нужно вставлять только страницы твоего класса myPage
eldar85 Дата 3.12.2010, 7:02
  получилось)))

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



void MainWindow::start()
{
    myPage* page = new myPage;
    ui->tabWidget->addTab(page->groupBox, QString("123"));
}


только как сделать чтобы он как у тебя запускал как то так

void MainWindow::start()
{

    ui->tabWidget->addTab( new myPage(), QString("123"));
}


не получается, извиняюсь что туплю но не делал так никогда...

вроде как в документации

    
ui->tabWidget->addTab(new QWidget(),nameCategory->text())


вот так вот вставляет текстЕдит

void MainWindow::start()
{
    ui->tabWidget->addTab( new QTextEdit, QString("123"));
}


а что в моем то классе не так?
eldar85 Дата 2.12.2010, 14:47
 
все понял)
Алексей1153 Дата 2.12.2010, 14:44
  eldar85, хм, классы - они и в ГУЕ (извиняюсь) классы
eldar85 Дата 2.12.2010, 14:42
  ооо вот это уже интересно))) я проста вот так динамически по ходу работы программы ни раз не менял ГУИ)) сейчас попробую)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 11:31