Russian Qt Forum
Ноябрь 26, 2024, 08:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как соединить слот и сигнал разных диалогов?  (Прочитано 5051 раз)
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());
}

но не знаю как принять его во втором окне, помогите пожалуйста разобраться
« Последнее редактирование: Апрель 17, 2014, 22:48 от West727 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Апрель 17, 2014, 12:36 »

1. test/abc.exe
2. надо сделать коннект (скорее всего в Dialog4)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
West727
Гость
« Ответ #2 : Апрель 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]
« Последнее редактирование: Апрель 17, 2014, 17:03 от West727 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Апрель 17, 2014, 18:04 »

1. если ты запускаешь из креатора, то экзешник лежит в отдельной папке, и вряд ли твоя другая программа лежит там же рядом. скопируй ее руками в нужное место и проверь.
также можно указать абсолютный путь к папке твоей программы: qApp->applicationDirPath()
2. ты, видимо, не понимаешь как пользоваться сигналами и слотами. почитай в книжке или в ассистенте, рассмотри примеры. вообще говоря, тут можно строку прямо через параметр конструктора передать.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
West727
Гость
« Ответ #4 : Апрель 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)); // не работает
}
« Последнее редактирование: Апрель 17, 2014, 22:50 от West727 » Записан
Bepec
Гость
« Ответ #5 : Апрель 17, 2014, 22:48 »

Учить С++ надо. Загляни в раздел "области видимости"
Записан
West727
Гость
« Ответ #6 : Апрель 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)));
}
естественно пишет ошибку =)
 
Записан
Bepec
Гость
« Ответ #7 : Апрель 18, 2014, 13:21 »

Благодаря 11 стандарту в Qt 5 - можно. Как - не пользовался, но примеров куча.
Записан
West727
Гость
« Ответ #8 : Апрель 18, 2014, 13:32 »

Благодаря 11 стандарту в Qt 5 - можно. Как - не пользовался, но примеров куча.
примеров в Qt SDK? или где?
подскажите пожалуйста ресурс.
Записан
Bepec
Гость
« Ответ #9 : Апрель 18, 2014, 14:19 »

Пользуйтесь гуглом, учитесь формулировать вопросы. Более быть сусаниным по гуглю не буду Улыбающийся
http://habrahabr.ru/post/141983/
Записан
West727
Гость
« Ответ #10 : Апрель 18, 2014, 15:06 »

Благодарю
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.