Russian Qt Forum

Qt => Вопросы новичков => Тема начата: karpenko1989 от Март 06, 2012, 13:41



Название: Получить доступ к элементам класса формы Qt Designer
Отправлено: karpenko1989 от Март 06, 2012, 13:41
Здравствуйте, создал класс формы Qt Designer. Разметил на нем несколько графических элементов.

файл SelectParamsForm.h
Код:
#ifndef SELECTPARAMSFORM_H
#define SELECTPARAMSFORM_H

#include <QWidget>
#include "ui_selectparamsform.h"

namespace Ui {
    class SelectParamsForm;
}

class SelectParamsForm : public QWidget
{
    Q_OBJECT

public:
    explicit SelectParamsForm(QWidget *parent = 0);
    ~SelectParamsForm();

private:
    Ui::SelectParamsForm *ui;
};

#endif // SELECTPARAMSFORM_H

Имеется также класс TreeOfParams, в котором я создаю объект класса формы Qt Designer.
Код:
ParamsForm = new SelectParamsForm;

В этом классе работают методы show() и hide(), но при пыпытке написать что-то типо этого:
Код:
ParamsForm->label->setText("");
выводится ошибка C:\QtSDK\QtProj\www\TreeOfParametrs.cpp:18: ошибка: 'class SelectParamsForm' has no member named 'label'
Как это исправить?


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: mutineer от Март 06, 2012, 13:42
Все виджеты формы доступны через указатель Ui::SelectParamsForm *ui;


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: kambala от Март 06, 2012, 13:48
надо читать книжки или ассистент


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: karpenko1989 от Март 06, 2012, 14:03
Добавил в заголовочный файл TreeOfParametrs
Код:
    Ui::SelectParamsForm *ui;

Пишу в конструкторе это класса:
Код:
TreeOfParametrs::TreeOfParametrs(QSqlDatabase db): ui(new Ui::SelectParamsForm)
{
    ParamsForm = new SelectParamsForm;
    ui->label->setText("dfdf");
}
Label он видит, но при запуске программа вылетает с неизвестной ошибкой.


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: mutineer от Март 06, 2012, 14:06
Добавил в заголовочный файл TreeOfParametrs
Код:
    Ui::SelectParamsForm *ui;

Пишу в конструкторе это класса:
Код:
TreeOfParametrs::TreeOfParametrs(QSqlDatabase db): ui(new Ui::SelectParamsForm)
{
    ParamsForm = new SelectParamsForm;
    ui->label->setText("dfdf");
}
Label он видит, но при запуске программа вылетает с неизвестной ошибкой.

И в чем тайный смысл сего действа?  данный указатель уже есть в SelectParamForms


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: karpenko1989 от Март 06, 2012, 15:11
Прошу прощения, исправил, в конструкторе осталось

TreeOfParametrs::TreeOfParametrs(QSqlDatabase db)
{
    ui->setupUi(this);
    ui->label->setText("dfgs");
}
ui и label подсвечены коричневым цветом(т.е он их видит) но при запуске все-равно вылетает с ошибкой.


Название: Re: Получить доступ к элементам класса формы
Отправлено: mutineer от Март 06, 2012, 15:16
ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять


Название: Re: Получить доступ к элементам класса формы
Отправлено: karpenko1989 от Март 06, 2012, 15:53
ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять
Т.е из класса TreeOfParametrs я немогу получить доступ к к элементам формы класса SelectParamsForm?


Название: Re: Получить доступ к элементам класса формы
Отправлено: mutineer от Март 06, 2012, 15:54
ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять
Т.е из класса TreeOfParametrs я немогу получить доступ к к элементам формы класса SelectParamsForm?

Прям совсем напрямую не можешь. Но можешь сделать метод в SelectParamsForm, который будет возвращать ui, и тогда сможешь доступаться


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: Пантер от Март 06, 2012, 15:55
В SelectParamsForm заводишь геттеры/сеттеры, которые дергаешь, а он уже сам выставляет нужные значения у своих виджетов. Правда, не думаю, что мой ответ тебе будет понятен. :(


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: karpenko1989 от Март 07, 2012, 07:23
Спасибо за ответы.


Название: Re: Получить доступ к элементам класса формы
Отправлено: karpenko1989 от Март 11, 2012, 07:46
ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять
Т.е из класса TreeOfParametrs я немогу получить доступ к к элементам формы класса SelectParamsForm?

Прям совсем напрямую не можешь. Но можешь сделать метод в SelectParamsForm, который будет возвращать ui, и тогда сможешь доступаться

А какой тип значения должен быть у данного метода?
Делаю так:
Код:
namespace Ui {
    class SelectParamsForm;
}

class SelectParamsForm : public QWidget
{
    Q_OBJECT

public:
    explicit SelectParamsForm(QWidget *parent = 0);
    ~SelectParamsForm();
    ui ReturnUi();

private:
    Ui::SelectParamsForm *ui;
};
И, естественно, получаю ошибку 'ui' does not name a type


Название: Re: Получить доступ к элементам класса формы
Отправлено: Kurles от Март 11, 2012, 07:56
не
Код
C++ (Qt)
ui ReturnUi();
а
Код
C++ (Qt)
Ui::SelectParamsForm ReturnUi();
тогда уж.


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: karpenko1989 от Март 11, 2012, 08:28
Пишу так:
Код:
Ui::SelectParamsForm SelectParamsForm::ReturnUi()
{
   //ui = new Ui::SelectParamsForm;
   return ui;
}

Выводится ошибка: Cconversion from 'Ui::SelectParamsForm*' to non-scalar type 'Ui::SelectParamsForm' requested.
Как мне можно это исправить?


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: LisandreL от Март 11, 2012, 08:49
А что вам в этой ошибке непонятно?
Описано, что функция возвращает тип Ui::SelectParamsForm, а вы пытаетесь вернуть тип Ui::SelectParamsForm*.
Нужно либо:
1) исправить объявление функции и возвращать указатель,
2) либо возвращать результат используя разыменование (понимая что при этом мы получим КОПИЮ)
3) либо возвращать ссылку


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: Bepec от Март 11, 2012, 09:01
Что то жуткое происходит в этом топике...
Странная проблема. Множество ответов. НепонЯЯЯЯЯтно...


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: mutineer от Март 11, 2012, 13:00
Пишу так:
Код:
Ui::SelectParamsForm SelectParamsForm::ReturnUi()
{
   //ui = new Ui::SelectParamsForm;
   return ui;
}

Выводится ошибка: Cconversion from 'Ui::SelectParamsForm*' to non-scalar type 'Ui::SelectParamsForm' requested.
Как мне можно это исправить?


Посмотри мою подпись и тебе сразу станет понятно что надо делать


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: sudo от Март 11, 2012, 13:04
Посмотри мою подпись и тебе сразу станет понятно что надо делать

Ломать всем ноги?  :o


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: mutineer от Март 11, 2012, 13:05
Посмотри мою подпись и тебе сразу станет понятно что надо делать

Ломать всем ноги?  :o

Не, это для других случаев:)


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: Пантер от Март 11, 2012, 13:06
Посмотри мою подпись и тебе сразу станет понятно что надо делать

Ломать всем ноги?  :o
Да, если первый пункт не помог.


Название: Re: Получить доступ к элементам класса формы Qt Designer
Отправлено: kambala от Март 11, 2012, 17:18
тогда уж лучше пальцы