Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QT интерфейс, ООП
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
=DENIS=
Такой вопрос. В документации QT все примеры построены таким образом, создается класс, унаследованный от QWidget (QMainWIndow, ...) и в нем уже производятся действия: построение интерфейса, чтение файла, работа с сетью и т.п. Но мне кажется, что не правильно совмещать класс интерфейса и свои алгоритмы работы программы: работа с файлами, работа с сетью и т.п. Мне кажется, что надо создавать какой-то класс (допустим class Manager) который управляет и интерфейсом(GUI) и основной работой программы. Я прав или нет? Подскажите.
BRE
Прав. В идиале GUI должен легко убираться/заменяться на другой без ущерба для функциональности программы.
Гость_=DENIS=_*
Цитата(BRE @ 10.2.2012, 19:30) *
Прав. В идиале GUI должен легко убираться/заменяться на другой без ущерба для функциональности программы.


Так почему же в офф документации так пишут, для наглядности?

И такой вопрос, как в QtDesignet назначить для основной формы основной мнеджер компановки, назначаемый функцией setLayout(QLayout *l); Что-то не нашел такого.
Гость_=DENIS=_*
И как мне тогда лучше поступать, делать в С++ что-то подобное на интерфейсы в Java или передавать указатели на функции в интерфейс, чтобы эти функции выполнялись по нажатию кнопки?
BRE
Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:48) *
Так почему же в офф документации так пишут, для наглядности?

Это примеры, показывающие функционал Qt, а не то как правильно писать программы с использованием Qt.

Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:48) *
И такой вопрос, как в QtDesignet назначить для основной формы основной мнеджер компановки, назначаемый функцией setLayout(QLayout *l); Что-то не нашел такого.

Выбираешь саму форму и выбираешь тип компановки в меню "Форма".

Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:51) *
И как мне тогда лучше поступать, делать в С++ что-то подобное на интерфейсы в Java или передавать указатели на функции в интерфейс, чтобы эти функции выполнялись по нажатию кнопки?

В тех классах, объекты которых будут взаимодействовать с GUI, определять слоты и соединять сигналы от кнопок со слотами этих объектов-обработчиков.
Гость_=DENIS=_*
Спасибо за помощь.
Гость_=DENIS=_*
Есть класс WaitDialog унаследованный от QDialog

#include "waitdialog.h"
#include <QtCore/QString>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QHBoxLayout>

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    label = new QLabel(tr("Wait please"));
    cancelButton = new QPushButton(tr("Cancel"));
    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(label);
    layout->addWidget(cancelButton);
    setLayout(layout);
}

void WaitDialog::setText(QString mes)
{
    label->setText(mes);
}

QString WaitDialog::getText()
{
    return label->text();
}


Как правильно свзяать сигнал кнопки с внешним слотом (находится в основном классе Manger). Сделать механизм, подобный интерфейса, или сдалеать в WaitDialog функцию, в которую буду передавать SLOT(mySlot())???
RazrFalcon
Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{
Гость_=DENIS=_*
Цитата(RazrFalcon @ 23.2.2012, 9:37) *
Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{

Гость_=DENIS=_*
Цитата(RazrFalcon @ 23.2.2012, 9:37) *
Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{


Да, так можно. А может попробывать сделать что-то подобное интерфейсу?
Sokoloff
Цитата(Гость_=DENIS=_* @ 22.2.2012, 23:51) *
Как правильно свзяать сигнал кнопки с внешним слотом (находится в основном классе Manger). Сделать механизм, подобный интерфейса, или сдалеать в WaitDialog функцию, в которую буду передавать SLOT(mySlot())???

Я бы сделал что-то вроде

Если не надо обрабатывать клик в WaitDialog.
//waitdialog.h
class WaitDialog: public QDialog
{
...

signals:
   void closeBtnClicked();
}

//waitdialog.cpp

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    ...
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton, SIGNAL(clicked()), this, SIGNAL(closeBtnClicked()));
}



Если WaitDialog должен что-то делать перед или после клика.
//waitdialog.h
class WaitDialog: public QDialog
{
...

private slots:
   void closeBtnClickedSlot();

signals:
   void closeBtnClicked();
}

//waitdialog.cpp

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    ...
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton, SIGNAL(clicked()), this, SLOT(closeBtnClickedSlot()));
}

void WaitDialog::closeBtnClickedSlot()
{
   ...
   emit closeBtnClicked();
   ...
}


BRE
Не знаю для чего соединять кнопку Cancel со слотом, но может поможет...
Посмотри на QProgressDialog, в документации есть пример как его показывать и как обрабатывать нажатие Cancel.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.