Russian Qt Forum

Qt => Вопросы новичков => Тема начата: jatsuk от Сентябрь 11, 2011, 11:43



Название: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 11, 2011, 11:43
Добрый день

Нужно чтобы при входе в программу сразу нажималась кнопка m_ui->activon (это обычный pushbutton)

Я так понял,что нужно испусть такой сигнал...
Единственное, что я нашел - это то что испускаются сигналы с помощью emit
Думал будет что то типа.... emit m_ui->activon->clicked();
Нифига не работает  :(

Плз не судите строго и не кидайте ссылку на эту статью с сигналами и слотами...я уже её читал и не раз


Название: Re: Сигнал нажатия клавиши
Отправлено: acidburst от Сентябрь 11, 2011, 11:52
ui->pushButton->click()

может быть так?


Название: Re: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 11, 2011, 12:00
Спасибо вот так работает
m_ui->activon->click();


Название: Re: Сигнал нажатия клавиши
Отправлено: kambala от Сентябрь 11, 2011, 12:19
а не проще напрямую вызвать слот, привязанный к этой кнопке?


Название: Re: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 11, 2011, 12:42
а не проще напрямую вызвать слот, привязанный к этой кнопке?

Если не трудно, то подскажите как ?


Название: Re: Сигнал нажатия клавиши
Отправлено: kambala от Сентябрь 11, 2011, 12:54
у тебя где-то должна присутствовать такая строчка:
Код
C++ (Qt)
connect(m_ui->activon, SIGNAL(clicked()), this, SLOT(myslot()));
вот вызов m_ui->activon->click(); заменить на myslot();

конечно, если на кнопку повешено более одного слота, то лучше вызвать m_ui->activon->click();


Название: Re: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 11, 2011, 15:12
спс, попробую

Получилась такая ерунда...
Есть два поля и их сверяем

Есть LineEdit, туда сначала с реестра добавляются данные через Qsetting сделано....
Код:
QString pcod= setting.value("/Settings/cod","").toString();
    m_ui->serialproc->setText(pcod);
А потом сразу сигнал нажатия кнопки

Код:
 m_ui->activon->click(); 

Так проблема в том, что когда уже нажалась кнопка - данные в LineEdit ещё не появились (QMessageBox ошибка данные не совпадают)

Но когда закрываю QMessageBox, то вижу,что данные уже есть, и при повторном нажатии клавиши (Уже руками, то всё совпадает )

Вопрос ??? в чем причина ? может есть что то типа задержки и поэтому такая ерунда



Название: Re: Сигнал нажатия клавиши
Отправлено: kambala от Сентябрь 11, 2011, 15:32
Код
C++ (Qt)
QString pcod= setting.value("/Settings/cod","").toString();
m_ui->serialproc->setText(pcod);
QApplication::processEvents(); // а вот если в следующей строчке вызывать слот, соединенный с кнопкой, то эта строка не понадобится
m_ui->activon->click();


Название: Re: Сигнал нажатия клавиши
Отправлено: LisandreL от Сентябрь 11, 2011, 18:43
// а вот если в следующей строчке вызывать слот, соединенный с кнопкой, то эта строка не понадобится
И где по вашему мы в цикл обработки событий попадём, вызывая слот как функцию?


Название: Re: Сигнал нажатия клавиши
Отправлено: kambala от Сентябрь 11, 2011, 20:25
мне почему-то так всегда казалось :) (да, не слишком убедительный ответ)

хотя вот следующий проект не имеет никакой "задержки":
Код
C++ (Qt)
Widget::Widget(QWidget *parent) : QWidget(parent)
{
   ui.setupUi(this);
 
   connect(ui.pushButton, SIGNAL(clicked()), SLOT(click()));
 
   ui.lineEdit->setText(qApp->applicationDirPath());
   ui.pushButton->click();
}
 
void Widget::click()
{
   qDebug("%s", qPrintable(ui.lineEdit->text()));
}


Название: Re: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 12, 2011, 13:47
Нашел причину всех зависаний... в первой LineEdit вычислялся ассемблер код, результат которого к тому времени еще не успел записаться в LineEdit.
Теперь ошибку не выдает.

Но новая проблема форма от этого псевдонажатия не закрывается !!! Кнопка срабатывает, условия тоже, заходит в условие и проходит строчку... Dialog::close();

Если после этого нажать снова кнопку вручную, то всё нормально ! форма закрывается
Нифига не пойму мистика

Код:
if (passw==uppassstr) { //Сравнивает 2 строки (Все отлично теперь, в условие заходит)

bool povt= setting.value("/Settings/reactiv", false).toBool();//Первый ли раз ли программа активирована (Просто переменная)

      if(!povt){ // Суда уже не заходит т.к. переменная True (так и должно быть)
       //Если первый раз
       QMessageBox::information(this, tr("Активация"), tr("Продукт успешно активирован") );
       setting.setValue("/Settings/cod",passw);// Сохранить код в реестр
        setting.setValue("/Settings/reactiv",true);
       }

       Dialog::close();// А здесь НЕ ЗАКРЫВАЕТ !
   }

   else {QMessageBox::warning(this, tr("Ошибка"), tr("Неверный ключ активации") );}



Название: Re: Сигнал нажатия клавиши
Отправлено: jatsuk от Сентябрь 12, 2011, 14:20
Я тут поразмыслил...
Может Форма не может закрыться, потому что ещё программа то не загрузилась а, она сразу закрывается...
Ну или что то типо этого.