Название: Проблема с диалогом
Отправлено: XpycT от Август 08, 2009, 10:22
У меня в приложении есть Диалог с кнопками, после нажатия на которую в основное приложение должно отправиться ObjectName строкой. Но после отправки все приложение падает, подскажите где ошибка :( Клас диалога: C++ (Qt) #ifndef MOVIESNAMEDIALOG_H #define MOVIESNAMEDIALOG_H #include <QDialog> class QCommandLinkButton; class MoviesName : public QDialog { Q_OBJECT public: MoviesName(QWidget *parent=0,const QString &httpResponce=""); QString movieID; private slots: void accept(); private: QCommandLinkButton* createButton(const QString& id,const QString& name); }; #endif // MOVIESNAMEDIALOG_H
C++ (Qt) #include <QVBoxLayout> #include <QCommandLinkButton> #include "moviesnamedialog.h" MoviesName::MoviesName(QWidget *parent,const QString &httpResponce) :QDialog(parent) { setAttribute(Qt::WA_DeleteOnClose); setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint); setWindowIcon(QIcon(":/images/icon.png")); setWindowTitle(tr("Select movie")); QVBoxLayout *layouts=new QVBoxLayout; QString line = httpResponce; QRegExp rx("\\<a.*\\/level\\/1\\/film\\/(\\d+)*\\/sr\\/.*\\>(.*)\\<\\/a\\>, .*(\\d+)\\<\\/a\\>\\<\\/td\\>"); rx.setMinimal(true); QStringList list; int pos = 0; while ((pos = rx.indexIn(line, pos)) != -1) { //qDebug() <<rx.cap(1)<< rx.cap(2)<< rx.cap(3); pos += rx.matchedLength(); layouts->addWidget(createButton(rx.cap(1),QString("%1 ( %2 )") .arg(rx.cap(2)).arg(rx.cap(3)))); } setLayout(layouts); } QCommandLinkButton* MoviesName::createButton(const QString& id,const QString& name) { QCommandLinkButton* pcmd = new QCommandLinkButton(name); pcmd->setObjectName(id); connect(pcmd,SIGNAL(clicked()),this,SLOT(accept())); return pcmd; } void MoviesName::accept() { QString id=((QCommandLinkButton*)sender())->objectName(); movieID = id; QDialog::accept(); }
И функция вызова с оновного приложения C++ (Qt) void MainWindow::searchMovieDescription(const QString &httpResponce) { QString id; MoviesName mn(this,httpResponce); if(mn.exec()) id= mn.movieID; qDebug() << id; }
Получается в дебаг выводит и падает, а если я создаю диалог как C++ (Qt) QString id; MoviesName *mn=new MoviesName (this,httpResponce); if(mn->exec()) id= mn->movieID; qDebug() << id;
Приложение вообще не получает значение.
Название: Re: Проблема с диалогом
Отправлено: Пантер от Август 08, 2009, 10:30
C++ (Qt) QCommandLinkButton*button = qobject_cast<QCommandLinkButton*>(sender()); if (button) QString id = button->objectName()
Название: Re: Проблема с диалогом
Отправлено: ритт от Август 08, 2009, 10:45
пантер, ай-ай-ай ) MoviesName::MoviesName(QWidget *parent,const QString &httpResponce) :QDialog(parent) { - setAttribute(Qt::WA_DeleteOnClose); setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint); setWindowIcon(QIcon(":/images/icon.png")); setWindowTitle(tr("Select movie"));
Название: Re: Проблема с диалогом
Отправлено: Пантер от Август 08, 2009, 10:49
Этого не заметил. Ну, я тоже ошибку одну указал. :)
Название: Re: Проблема с диалогом
Отправлено: XpycT от Август 08, 2009, 10:57
Блин спасибо.. вот только не пойму почему у меня в другом дилаоге авторизации стоит setAttribute(Qt::WA_DeleteOnClose) и все прекрасно работает, а тут нет ???
Название: Re: Проблема с диалогом
Отправлено: pastor от Август 08, 2009, 10:59
Этого не заметил. Ну, я тоже ошибку одну указал. :)
Да, такая проверка не помешает, но в данном контексте коры небудет. Константин раскрыл суть проблемы :) БТВ: Никаких приведений к QCommandLinkButton делать ненадо. objectName() это методо класса QObject, так что сразу смело можно писать C++ (Qt) void MoviesName::accept() { QString id= sender()->objectName(); movieID = id; QDialog::accept(); }
Название: Re: Проблема с диалогом
Отправлено: pastor от Август 08, 2009, 10:59
Аналогично валится :(
Внимательно перечитай пост Константина
Название: Re: Проблема с диалогом
Отправлено: XpycT от Август 08, 2009, 11:00
Просто пока писал вы ответили )) не успел отредактировать.
|