Russian Qt Forum

Qt => Вопросы новичков => Тема начата: West727 от Апрель 17, 2014, 12:27



Название: Как соединить слот и сигнал разных диалогов?
Отправлено: West727 от Апрель 17, 2014, 12:27
Уважаемые форумчане помогите советом!

1.по клику на pushbutton необходимо открыть .exe из /корень/test/abc.exe

Код:
void Dialog4_1::on_pushButton_50_clicked()
{
    QString filename = "/test/abc.exe";
    QDesktopServices::openUrl(QUrl(filename));
}

ошибку выдает
ShellExecute '/test/abc.exe' failed (error 2).


2. Каким образом можно передать текст из одного Lineedit в lineedit другого диалогового окна(вызывается pb 1го окна)?

создаю сигнал и слот в хэдере 1го окна

Код:
signals:
    void sendName(const QString &str);

private slots:

    void on_pushButton_40_clicked();
    void on_pushButton_41_clicked();    
    void okClicked();

далее создаю метод коннект и вызываю сигнал

Код:
connect(ui->pushButton_41,SIGNAL(clicked()),SLOT(okClicked()));


Код:
void Dialog4::okClicked()
{
    emit sendName(ui->lineEdit->text());
}

но не знаю как принять его во втором окне, помогите пожалуйста разобраться


Название: Re: Как открыть .exe стороннего приложения?
Отправлено: kambala от Апрель 17, 2014, 12:36
1. test/abc.exe
2. надо сделать коннект (скорее всего в Dialog4)


Название: Re: Как открыть .exe стороннего приложения?
Отправлено: West727 от Апрель 17, 2014, 12:44
1.та же ошибка
2.в хэдере 2го окна создал
Код:
public slots:   
    void takeName();

в срр 1го

connect(ui->pushButton_41,SIGNAL(clicked()),SLOT(okClicked()));


Код:
void Dialog4::okClicked()
{
    emit sendName(ui->lineEdit->text());
}

[code]void Dialog4::on_pushButton_41_clicked()
{
    Dialog4_1 *d4_1wnd = new Dialog4_1(this);
    d4_1wnd->show();
    connect(sendName,SIGNAL(QString &str),d4_1wnd->takeName,SLOT());
}

что я делаю не так?[/code]


Название: Re: Как открыть .exe стороннего приложения?
Отправлено: kambala от Апрель 17, 2014, 18:04
1. если ты запускаешь из креатора, то экзешник лежит в отдельной папке, и вряд ли твоя другая программа лежит там же рядом. скопируй ее руками в нужное место и проверь.
также можно указать абсолютный путь к папке твоей программы: qApp->applicationDirPath()
2. ты, видимо, не понимаешь как пользоваться сигналами и слотами. почитай в книжке или в ассистенте, рассмотри примеры. вообще говоря, тут можно строку прямо через параметр конструктора передать.


Название: Re: Как открыть .exe стороннего приложения?
Отправлено: West727 от Апрель 17, 2014, 22:48
1.получилось вот так:
Код:
{
    QString str = qApp->applicationDirPath();
        QDir::setCurrent(str);
        QProcess::startDetached("1.exe");
        this->close();
}

2.создал слов в хэдере 2го диалога и переписал срр 1го:

Код:
public slots:

    void takeName(QString);



Код:
void Dialog4::pbClicked()
{
    Dialog4_1 *d4_1wnd = new Dialog4_1();
    d4_1wnd->show();
 
    emit sendName(ui->lineEdit->text());
    connect(this,SIGNAL(sendName(QString)),d4_1wnd,SLOT(takeName(QString)));
 
}



пытаюсь принять его во 2м диалоге но ничего не получается
Код:
Dialog4_1::Dialog4_1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog4_1)
{        
    ui->setupUi(this);    
    ui->lineEdit->setText(takeName(QString)); // не работает
}


Название: Re: Как открыть .exe стороннего приложения?
Отправлено: Bepec от Апрель 17, 2014, 22:48
Учить С++ надо. Загляни в раздел "области видимости"


Название: Re: Как соединить слот и сигнал разных диалогов?
Отправлено: West727 от Апрель 18, 2014, 13:09
решение я нашел

Код:
void Dialog4_1::takeName(QString tn)
{
    ui->lineEdit->setText(tn);
}


но возник еще 1 вопрос:

можно ли напрямую соединить методом коннект кнопку и удаление виджета с гор. слоя?

Код:
Dialog4_1::Dialog4_1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog4_1)
{
    dragwindow *drw = new dragwindow();
    ui->setupUi(this);   
    ui->horizontalLayout_2->addWidget(drw);
    connect(ui->pushButton_46,SIGNAL(clicked()),ui->horizontalLayout_2,SLOT(removeWidget(drw)));
}
естественно пишет ошибку =)
 


Название: Re: Как соединить слот и сигнал разных диалогов?
Отправлено: Bepec от Апрель 18, 2014, 13:21
Благодаря 11 стандарту в Qt 5 - можно. Как - не пользовался, но примеров куча.


Название: Re: Как соединить слот и сигнал разных диалогов?
Отправлено: West727 от Апрель 18, 2014, 13:32
Благодаря 11 стандарту в Qt 5 - можно. Как - не пользовался, но примеров куча.
примеров в Qt SDK? или где?
подскажите пожалуйста ресурс.


Название: Re: Как соединить слот и сигнал разных диалогов?
Отправлено: Bepec от Апрель 18, 2014, 14:19
Пользуйтесь гуглом, учитесь формулировать вопросы. Более быть сусаниным по гуглю не буду :)
http://habrahabr.ru/post/141983/


Название: Re: Как соединить слот и сигнал разных диалогов?
Отправлено: West727 от Апрель 18, 2014, 15:06
Благодарю