Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ruzik от Февраль 09, 2011, 14:52



Название: Управление объектом
Отправлено: ruzik от Февраль 09, 2011, 14:52
Здравствуйте, не подскажите как сделать
Я в конструкторе класса объявляю lineEdit, далее мне нужно через событие сделать с этим объектом что-то, но в событии он не определяется,
и его ни как не передашь, ведь это событие, можно конечно объявить глобальный указатель на этот объект, но есть ли более удачное решение данной проблемы


Название: Re: Управление объектом
Отправлено: Пантер от Февраль 09, 2011, 14:55
Что-то вообще ничего не понятно. Давай подробнее и с кодом.


Название: Re: Управление объектом
Отправлено: ruzik от Февраль 09, 2011, 15:43
Для начала у меня есть класс
Код:
class MyBr : public QMainWindow, public Ui::MyBrClass
{
Q_OBJECT

public:
MyBr(QWidget *parent = 0, Qt::WFlags flags = 0);
~MyBr();
public slots:
void load(QString a);
signals:
void FormResize();
protected:
void resizeEvent( QResizeEvent* );
};
В его конструкторе я объявляю кучу виджетов и тп
Код:
MyBr::MyBr(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
setupUi(this);
this->setWindowTitle(tr("Web-Rizek 2.0"));
QPushButton * PrevButton = new QPushButton;
PrevButton->setText("<-");
PrevButton->setFixedWidth(30);
PrevButton->setToolTip(tr("Go back"));
QPushButton * Refresh = new QPushButton;
Refresh->setText("(%)");
Refresh->setFixedWidth(30);
Refresh->setToolTip(tr("Refresh"));
QPushButton * NextButton = new QPushButton;
NextButton->setText("->");
NextButton->setFixedWidth(30);
NextButton->setToolTip(tr("Go next"));
QLineEdit * Address = new QLineEdit;
Address->setFixedWidth(400);
Address->setToolTip(tr("Adress of your site"));
QPushButton * Go = new QPushButton;
Go->setText(tr("Go!"));
Go->setFixedWidth(35);
Go->setToolTip(tr("Go"));
QPushButton * StopButton = new QPushButton;
StopButton->setText("X");
StopButton->setFixedWidth(30);
StopButton->setToolTip(tr("Stop"));



//*******************
mainToolBar->addWidget(PrevButton);
mainToolBar->addWidget(Refresh);
mainToolBar->addWidget(NextButton);
mainToolBar->addWidget(StopButton);
mainToolBar->addWidget(Address);
mainToolBar->addWidget(Go);
//*******************
//==========================
connect(PrevButton, SIGNAL(clicked()), webView , SLOT(back()));
connect(NextButton, SIGNAL( clicked()), webView , SLOT(forward()));
connect(Refresh , SIGNAL(clicked()), webView, SLOT(Refresh()));
connect(StopButton, SIGNAL(clicked()), webView, SLOT(stop()));
connect(Go , SIGNAL(clicked()), this , SLOT(load()));
//==========================
}
И мне надо в
void MyBr::resizeEvent( QResizeEvent* )
сделать некоторые действия с Address, который объявлен в конструкторе, но resizeEvent- это событие, и ему не получится передать указатель на Address


Название: Re: Управление объектом
Отправлено: Fat-Zer от Февраль 09, 2011, 15:56
из того, что сразу бросается в глаза:
1) зачем множественное наследование...
2) покажите как определяете resizeEvent, раз уж в нём проблемма
3) объявите Address членом класса
4) не понятно зачем вам Ui, если вы всё равно дезайнером не пользуетесь
ещё замечанеий набросать можно наверное несколько штук, если присмотреться... И после таких вопросов/такого кода обычно посылают читать книжки по ООП/С++...


Название: Re: Управление объектом
Отправлено: ruzik от Февраль 09, 2011, 16:01
1)Так в книжке написано  ;D
2)В классе
protected:
   void resizeEvent( QResizeEvent* );<- просто объвление
Расписывание:
void MyBr::resizeEvent( QResizeEvent* )
{
   emit FormResize();
   webView->setFixedWidth(this->width());
   webView->setFixedHeight(this->height()-mainToolBar->height());   
}
3)Я в конструкторе его объявляю QLineEdit * Address = new QLineEdit;
4)Далеко не все, процентов 40% виджетов, а в будущем больше, как раз в дизайнере, просто я не знаю как там добавить кнопки в toolbar, вот и решил что добавлю на уровне кода)


Название: Re: Управление объектом
Отправлено: Igors от Февраль 09, 2011, 16:13
ещё замечаней набросать можно штуки 3-7... И после таких вопросов/такого кода обычно посылают читать книжки по ООП/С++...
Помню поставил я новый компилятор. Смотрю есть опция типа "проверить на грамотность С++" (выливает в текстовый файл). Ну я (бодро) ее включил. Мдааа..  :) Я понял что не стоит мнить себя асом, тем более кого-то "посылать" - на мою "крутизну" найдется еще круче.

По существу:

- множественное наследование не криминал, но (в данном случае) Ui::MyBrClass не может быть потомком QObject - обычно это сужает возможности

- проще объявить (m)Address членом класса - раз уж планируется с ним что-то делать


Название: Re: Управление объектом
Отправлено: ruzik от Февраль 09, 2011, 16:17
Спасибо, наверно так и сделаю, раз уж нельзя сделать по-другому при моем уровне знаний


Название: Re: Управление объектом
Отправлено: Fat-Zer от Февраль 09, 2011, 16:19
3) заметил, поправился, но вовремя не успел...

//оффтоп
Помню поставил я новый компилятор. Смотрю есть опция типа "проверить на грамотность С++" (выливает в текстовый файл). Ну я (бодро) ее включил. Мдааа..  :) Я понял что не стоит мнить себя асом, тем более кого-то "посылать" - на мою "крутизну" найдется еще круче.
А что за компилятор такой?


Название: Re: Управление объектом
Отправлено: Igors от Февраль 09, 2011, 16:24
Спасибо, наверно так и сделаю, раз уж нельзя сделать по-другому при моем уровне знаний
Не стоит "посыпать голову пеплом" :-) Мое личное/субъективное мнение - увлекаться дизайнером не нужно (на первых порах). Создать все "руками" не так сложно как может сначала показаться, зато все в Ваших руках и Вы хорошо понимаете что сделано.


Название: Re: Управление объектом
Отправлено: brankovic от Февраль 10, 2011, 01:25
А что за компилятор такой?

ставлю полтиник, что от микрософт.. их хлебом не корми, дай других попроверять ;)

Я тоже однажды обновил компилятор, и пошёл собирать какую-то программу с -Wall -Werror, как обычно. И вдруг он мне выдаёт кучу варнингов, они превращаются в ошибки и ничего не компилится. Оказывается, теперь по мнению gcc "предпочтительно ставить скобки в выражении, где присутствуют || и &&". А я всегда знал приоритет операций и скобки не ставил. А теперь должен почему-то. Вот так из-за полезных и нужных "проверок на грамотность" страдают грамотные люди..


Название: Re: Управление объектом
Отправлено: Igors от Февраль 10, 2011, 14:21
ставлю полтиник, что от микрософт.. их хлебом не корми, дай других попроверять ;)
Гоните полтинник - проиграли  :) Не микрософт и не gcc.

Я тоже однажды обновил компилятор, и пошёл собирать какую-то программу с -Wall -Werror, как обычно. И вдруг он мне выдаёт кучу варнингов, они превращаются в ошибки и ничего не компилится. Оказывается, теперь по мнению gcc "предпочтительно ставить скобки в выражении, где присутствуют || и &&". А я всегда знал приоритет операций и скобки не ставил. А теперь должен почему-то. Вот так из-за полезных и нужных "проверок на грамотность" страдают грамотные люди..
Нет, этот мне указал все "по делу". Ну кое-где конечно "зависит от вкуса как писать", но с подавляющим большинством его замечаний я вынужден был согласиться.


Название: Re: Управление объектом
Отправлено: brankovic от Февраль 11, 2011, 08:57
ставлю полтиник, что от микрософт.. их хлебом не корми, дай других попроверять ;)
Гоните полтинник - проиграли  :) Не микрософт и не gcc.

ооо.. тогда что-же? Для Borland это не в их стиле вроде. Ваком и так еле-еле жил, но может они? Или.. о нет, неужели КАМЯУ?!! В общем пруфлинк в студию..


Название: Re: Управление объектом
Отправлено: Fat-Zer от Февраль 11, 2011, 09:06
ещё версия - icc ???


Название: Re: Управление объектом
Отправлено: Igors от Февраль 11, 2011, 11:10
ещё версия - icc ???
Это правильный ответ  :)

В общем пруфлинк в студию..
Ну я не обещал Вам чего-то подавать/доказывать  :)
Триал версия доступна (под все платформы) - скачивайте, ставьте, смотрите. Не пожалеете - ВЕЩЬ!


Название: Re: Управление объектом
Отправлено: brankovic от Февраль 11, 2011, 23:36
ещё версия - icc ???
Это правильный ответ  :)

Какое разочарование. Нет, я догадываюсь, что на свете много идиотов, верю даже, что и в интел их достаточно. Но грустно как-то всё же..

Ну я не обещал Вам чего-то подавать/доказывать  :)
Триал версия доступна (под все платформы) - скачивайте, ставьте, смотрите. Не пожалеете - ВЕЩЬ!

Да что вы, уважаемый Igors, какие могут быть к Вам претензии или требования. Только хотел узнать "правильный ответ", но выразился не совсем корректно, извините.