Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2016, 08:12   #1
console
Новичок
Джуниор
 
Регистрация: 18.11.2007
Сообщений: 2
Печаль Использование UI из дизайнера форм на виджетах

Привет. Сразу скажу, что я с С++ не в больших ладах. Но не суть.
Короче. У меня есть MainWindow, на нем программно прописано, что есть QListWidget и QStackedWidget. Делал по примеру, мол нажимаешь на значек в списке, появляется определенный виджет. Проблема в том, что у меня эти виджеты сдизайнены не программно, а с помощью дизайнера форм.

Так вот. У меня есть pages.h , где объявлены классы виджетов. Например, Settings:
Код:
#include <QWidget>

namespace Ui
{
    class Settings;
}

class Settings : public QWidget
{
    Q_OBJECT
public:
    Settings(QWidget *parent = 0);
    ~settings();

private:
    static Ui::settings *ui; 
};
Вот код конструктора этого класса. Здесь тупо присваивается форма:
Код:
settings::settings(QWidget *parent) : QWidget(parent), ui(new Ui::settings)
{
    ui->setupUi(this);
}
Проблема возникает, когда я из других файлов пытаюсь обратиться и изменить поля на форме. Например, в файле mainwindow.cpp:
Код:
 
MainWindow::MainWindow()
{
    //Здесь код-код-код...

    Settings::ui->firstAddedParamLabel->setVisible(true);
}
Сначала вылезла ошибка, что идет обращение к приватному полю Ui* Settings; Окей, сделал его публичный(хотя по всем канонам не стоит так делать). Дальше, вылезла ошибка, что идет обращение не к статическому полю Ui* Settings; Окей, сделал статичным.
Теперь же ошибка вылезает в конструкторе, где задается форма. Мол, нельзя у статических полей определение писать.
Собственно, как лучше реализовать эту вещь? Пробовал гуглить, но не уверен, что даже могу сформулировать вопрос в поле поиска. Помогите!!1
console вне форума Ответить с цитированием
Старый 04.04.2016, 08:19   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А что вы хотите с формой сделать?
Обычно вместо ...firstAddedParamLabel->setVisible(true) извне делают сигналы/слоты или просто public функции и их используют.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.04.2016, 08:24   #3
console
Новичок
Джуниор
 
Регистрация: 18.11.2007
Сообщений: 2
По умолчанию

Ну, к примеру, в main.cpp у меня идет поиск объекта с кнопкой. И далее переход по слоту к методу:
Код:
Settings sets;
QObject* saveConfig=sets.findChild<QObject*>("saveSetupsButton");   
QObject::connect(saveConfig, SIGNAL(clicked()),executor, SLOT(saveConfig()));
Так я не могу сделать, вылезает ошибка. Ну вот чисто в main.cpp у меня только идет нахождение элементов на формах и соединение со слотами. Раньше все это находилось на одной форме и было норм, но не красива. Решил сделать виджетами.

А в mainwindow.cpp мне нужно получать значения полей ввода или наоборот менять их. и.т.д. Мне кажется, слотами тут не обойтись...

Последний раз редактировалось console; 04.04.2016 в 08:27.
console вне форума Ответить с цитированием
Старый 04.04.2016, 08:36   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А зачем в main.cpp кнопка какого-то виджета?
Не проще в самом виджете делать все что надо с кнопкой и предоставить необходимые слоты/сигналы для использования снаружи?

Например
Код:
public slots:
    void setSomethingText(QString text);
    QString getSomethingText() const;

Некрасиво это как именно? Для layout можно и без отдельных классов обойтись, можно на саму форму в дизайнере кинуть виджет и прочие контейнеры.


Для соединения сигналов и слотов кстати есть более удобный/безопасный синтаксис в Qt5 https://wiki.qt.io/New_Signal_Slot_Syntax
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 04.04.2016 в 08:40.
Alex11223 вне форума Ответить с цитированием
Старый 11.04.2016, 06:12   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Сначала вылезла ошибка, что идет обращение к приватному полю Ui* Settings; Окей, сделал его публичный(хотя по всем канонам не стоит так делать). Дальше, вылезла ошибка, что идет обращение не к статическому полю Ui* Settings; Окей, сделал статичным.
Теперь же ошибка вылезает в конструкторе, где задается форма. Мол, нельзя у статических полей определение писать.
"по всем канонам нельзя так делать" не просто так, а потому, что управлять твоей формой должен класс формы, а не какой-то другой класс (типа MainWindow).

Ты написал то, что сам не понимал и вылезла ошибка, ну ты такой взял и написал слово static (опять же сам не понимая что это повлечет).

Любой восьмиклассник знает что так можно работать только со статическими полями:
Код:
Settings::
Ну просто потому, что ты тут не указываешь никакой конкретный объект, а обращаешься через имя класса (это же реально поймет любой школьник?). Ну а если это статическое поле, то зачем ты его в конструкторе объекта инициализируешь через список конструктора?

Рано тебе ковырять Qt, возьми книжки по основам С++.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу дизайнера kta87 Фриланс 2 04.08.2013 18:19
Qt Creator и добавление/использование N форм в приложении на нем Mixim Qt и кроссплатформенное программирование С/С++ 7 01.08.2012 07:33
QT: проблема - не редактируются итемы в виджетах spbcypher Qt и кроссплатформенное программирование С/С++ 0 13.08.2010 12:43
Использование функций из других форм JustKurt Общие вопросы Delphi 10 12.07.2009 21:16
Использование 2х форм Zeraim Общие вопросы Delphi 4 27.05.2008 17:14