Название: Реализация слотов в Qt 4.0.1
Отправлено: bob от Сентябрь 04, 2005, 11:08
В файле ui_<FormName>.h есть объявление стандартных слотов, а где я могу их перегрузить или сделать новый слот (нестандартный). В Qt 3.X был срр-модуль формы, а в Qt 4.0.1 я его не нахожу уж очень сильно все изменилось. :(
Название: Реализация слотов в Qt 4.0.1
Отправлено: Racheengel от Сентябрь 05, 2005, 11:55
Создаешь еще один файл, в котором наследуешься от диалога, созданного дизайнером, и в нем все перегружаешь, дополняешь и т.д.
Название: Реализация слотов в Qt 4.0.1
Отправлено: Larrikin от Ноябрь 03, 2005, 22:45
Извините за ламерство, но поднимаю наверх еще одну тему, так как запарился со слотами и сигналами. Код: client.cpp #include "ui_cl.h" #include "client.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *widget = new QWidget; client ui; ui.setupUi(widget); widget->show(); ui.ftpconnect("mysite.net","test","test"); ui.textEdit->textCursor().insertText("FTP command"); return app.exec(); }
client.h class client : public Ui_widget,QWidget { public: QFtp *ftp; client(QWidget *parent = 0){ ftp = new QFtp(); connect(ftp, SIGNAL(commandStarted(int)), this, SLOT(ftpStartCommand(int))); }; void ftpconnect(QString sn,QString un,QString pw){ ftp->connectToHost(sn,21); ftp->login(un,pw); }; private slots: void ftpStartCommand(int i){ textEdit->textCursor().insertText("Test FTP command"); }; }; connect(ftp, SIGNAL(commandStarted(int)),this, SLOT(ftpStartCommand(int))); <- Правильно объявлено? Оно не работает, но и make не ругается. void ftpconnect выполняется точно.
Название: Реализация слотов в Qt 4.0.1
Отправлено: Larrikin от Ноябрь 04, 2005, 01:46
Немного переделал. #include "client.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv); client widget; widget.show(); return app.exec(); } Собственно класс: #include <QApplication> #include <QFont> #include <QFtp> #include <QLCDNumber> #include <QPushButton> #include <QSlider> #include <QVBoxLayout> #include <QHBoxLayout> #include <QTextEdit> #include <QTextCursor> #include <QProgressBar> #include <QSpacerItem> #include <QWidget>
class client : public QWidget { private slots: void ftpCommand(int,bool); void ftpCommand1(int); public: QFtp *ftp; QVBoxLayout *vbl; QHBoxLayout *hbl; QProgressBar *pg; QPushButton *eb; QTextEdit *te; QSpacerItem *spi; client(QWidget *parent = 0); void ftpC(QString sn, QString un, QString pw); };
void client::ftpC(QString sn, QString un, QString pw){ QApplication::setOverrideCursor(Qt::WaitCursor); ftp->connectToHost(sn); ftp->login(un,pw); ftp->list(); };
void client::ftpCommand(int i, bool b){ te->textCursor().insertText("Test ftp command"); };
void client::ftpCommand1(int i){ te->textCursor().insertText("Test ftp command"); };
client::client(QWidget *parent) : QWidget(parent) { ftp = new QFtp(this); vbl = new QVBoxLayout(parent); pg = new QProgressBar(); hbl = new QHBoxLayout(); eb = new QPushButton("Quit"); spi = new QSpacerItem(40,20, QSizePolicy::Expanding, QSizePolicy::Minimum); te = new QTextEdit(); vbl->addWidget(pg); vbl->addWidget(te); hbl->addItem(spi); hbl->addWidget(eb); vbl->addLayout(hbl); setLayout(vbl); /////////////////// /////////////////// pg->setValue(5); te->setReadOnly(true); ////////////////// connect(eb, SIGNAL(clicked()), qApp, SLOT(quit())); // connect(ftp, SIGNAL(commandFinished(int,bool)), qApp, SLOT(quit())); connect(ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftpCommand(int,bool))); connect(ftp, SIGNAL(commandStarted(int)), this, SLOT(ftpCommand1(int))); ftpC("mysite.net","test","test"); QApplication::restoreOverrideCursor(); } Нашел где проблема. Вот это работает: connect(ftp, SIGNAL(commandFinished(int,bool)), qApp, SLOT(quit())); Это нет. connect(ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(ftpCommand(int,bool))); Почему???????????????
Название: Реализация слотов в Qt 4.0.1
Отправлено: Larrikin от Ноябрь 04, 2005, 07:39
Причем если я делаю connect(ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(quit())); То сигнал тоже перестает обрабатываться. Тоесть сдесь не работает "this". Гуру, подскажите плз!
Название: Реализация слотов в Qt 4.0.1
Отправлено: Larrikin от Ноябрь 04, 2005, 08:06
Проблема понемногу решается. добавил макрос Q_OBJECT. При компиляции ругается на переопределенные функции. Тоесть, прототипы определены в описании класса, а потом уже собственно функция. Возможно я неточно выразился, но когда я методы класса засунул сразу в описание, заработало. Иначе то никак??? class client : public QWidget { Q_OBJECT private slots: void ftpCommand(int i,bool b){ te->textCursor().insertText("Test ftp command"); }; void ftpCommand1(int i){ te->textCursor().insertText("Test ftp command"); }; public: QFtp *ftp; QVBoxLayout *vbl; QHBoxLayout *hbl; QProgressBar *pg; QPushButton *eb; QTextEdit *te; QSpacerItem *spi; client(QWidget *parent = 0){ ftp = new QFtp(this); vbl = new QVBoxLayout(parent); pg = new QProgressBar(); hbl = new QHBoxLayout(); eb = new QPushButton("Quit"); spi = new QSpacerItem(40,20, QSizePolicy::Expanding, QSizePolicy::Minimum); te = new QTextEdit(); vbl->addWidget(pg); vbl->addWidget(te); hbl->addItem(spi); hbl->addWidget(eb); vbl->addLayout(hbl); setLayout(vbl); /////////////////// // /////////////////// pg->setValue(5); te->setReadOnly(true); ////////////////// connect(eb, SIGNAL(clicked()), qApp, SLOT(quit())); //connect(ftp, SIGNAL(commandFinished(int,bool)), qApp, SLOT(ftpCommand(int,bool))); connect(ftp, SIGNAL(commandStarted(int)), this, SLOT(ftpCommand1(int))); ftpC("mysite.net","test","test"); // this->ftpCommand(1, true); }; void ftpC(QString sn, QString un, QString pw){ ftp->connectToHost(sn); ftp->login(un,pw); ftp->list(); }; };
|