Я новичок в qt, поэтому я не совсем понял механизм слота сигнала. вот моя настройка. Диалоговый класс (его диалог с линиейEdit, называемый "lineEdit") класс mainwindow (у которого также есть линияEdit)
У меня есть это:
void MainWindow::keyPressEvent(QKeyEvent *event) {
int i=event->key();
//char z=(char)i;
// connect(ui->lineEdit, SIGNAL(textChanged(QString)), dialog, SLOT(setText(QString)));
if(i>=48&&i<=57)
{
QString s= QString::number(i-'0');
q+=s;
ui->lineEdit->setText(q);
}
Я хочу также установить текст диалога lineEdit на q. как я об этом узнал?
Вы не пойдете никуда с Qt, если не поймете основы. Прочтите подробный примерный код, который пришел с ним, если понимание документации не является вашей вещью. Некоторые люди лучше читают прозу, некоторые - при чтении кода, в этом нет ничего плохого. Просто не забудьте сделать это :)
QLineEdit
уже обрабатывает свои собственные нажатия клавиш. Нет необходимости переопределять эту функциональность.
Соединения сигнальных слотов должны быть статическими, если ваше приложение не меняет состояния. Если вы подключаете сигнал на объект к слоту на другом объекте несколько раз, тогда слот будет вызываться столько раз, сколько есть соединений.
Идиоматический способ передачи данных между парой QLineEdits
выглядит следующим образом:
connect(ui->lineEdit, SIGNAL(textEdited(QString)),
dialog, SLOT(setText(QString)));
connect(dialog, SIGNAL(textEdited(QString)),
ui->lineEdit, SLOT(setText(QString)));
Вероятно, вы захотите установить это соединение в конструкторе MainWindow
, но в любом случае вы хотите, чтобы это было сделано один раз.
Вы должны использовать textEdited
сигнал, а не textChanged
. Первый из них испускается, когда пользователь взаимодействует с элементом управления, чтобы изменить его. Последнее испускается, если текст был изменен пользователем или программным путем, вызвав setText
. Если вы связали textChanged
с setText
между двумя элементами управления, вы получите бесконечный цикл. QML достаточно умен, чтобы обнаружить его, но код виджетов AFAIK - нет.
немного поздно, но для других, которые приходят посмотреть эту страницу, вы можете посмотреть немного (~ 30 минут!) видео youtube, которое я подготовил...
(показывает: подключение к базе данных, диалоги, сигнал и слоты между диалогами,...)
https://www.youtube.com/watch?v=TEq15So3fUg
Ура!
setupUi
перед подключением.