Russian Qt Forum
Ноябрь 24, 2024, 11:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Получить доступ к элементам класса формы Qt Designer  (Прочитано 18070 раз)
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'
Как это исправить?
Записан
mutineer
Гость
« Ответ #1 : Март 06, 2012, 13:42 »

Все виджеты формы доступны через указатель Ui::SelectParamsForm *ui;
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Март 06, 2012, 13:48 »

надо читать книжки или ассистент
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
karpenko1989
Гость
« Ответ #3 : Март 06, 2012, 14:03 »

Добавил в заголовочный файл TreeOfParametrs
Код:
    Ui::SelectParamsForm *ui;

Пишу в конструкторе это класса:
Код:
TreeOfParametrs::TreeOfParametrs(QSqlDatabase db): ui(new Ui::SelectParamsForm)
{
    ParamsForm = new SelectParamsForm;
    ui->label->setText("dfdf");
}
Label он видит, но при запуске программа вылетает с неизвестной ошибкой.
Записан
mutineer
Гость
« Ответ #4 : Март 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
Записан
karpenko1989
Гость
« Ответ #5 : Март 06, 2012, 15:11 »

Прошу прощения, исправил, в конструкторе осталось

TreeOfParametrs::TreeOfParametrs(QSqlDatabase db)
{
    ui->setupUi(this);
    ui->label->setText("dfgs");
}
ui и label подсвечены коричневым цветом(т.е он их видит) но при запуске все-равно вылетает с ошибкой.
Записан
mutineer
Гость
« Ответ #6 : Март 06, 2012, 15:16 »

ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять
« Последнее редактирование: Март 06, 2012, 15:22 от mutineer » Записан
karpenko1989
Гость
« Ответ #7 : Март 06, 2012, 15:53 »

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

ui есть у класса SelectParamsForm
у класса TreeOfParametrs ui нету и не надо его туда добавлять
Т.е из класса TreeOfParametrs я немогу получить доступ к к элементам формы класса SelectParamsForm?

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 06, 2012, 15:55 »

В SelectParamsForm заводишь геттеры/сеттеры, которые дергаешь, а он уже сам выставляет нужные значения у своих виджетов. Правда, не думаю, что мой ответ тебе будет понятен. Грустный
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
karpenko1989
Гость
« Ответ #10 : Март 07, 2012, 07:23 »

Спасибо за ответы.
Записан
karpenko1989
Гость
« Ответ #11 : Март 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
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #12 : Март 11, 2012, 07:56 »

не
Код
C++ (Qt)
ui ReturnUi();
а
Код
C++ (Qt)
Ui::SelectParamsForm ReturnUi();
тогда уж.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
karpenko1989
Гость
« Ответ #13 : Март 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.
Как мне можно это исправить?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #14 : Март 11, 2012, 08:49 »

А что вам в этой ошибке непонятно?
Описано, что функция возвращает тип Ui::SelectParamsForm, а вы пытаетесь вернуть тип Ui::SelectParamsForm*.
Нужно либо:
1) исправить объявление функции и возвращать указатель,
2) либо возвращать результат используя разыменование (понимая что при этом мы получим КОПИЮ)
3) либо возвращать ссылку
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 23.