Передача данных между 2 окнами. Qt

0

Я новичок в 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
signals
window
slot

2 ответа

2
Лучший ответ
  1. Вы не пойдете никуда с Qt, если не поймете основы. Прочтите подробный примерный код, который пришел с ним, если понимание документации не является вашей вещью. Некоторые люди лучше читают прозу, некоторые - при чтении кода, в этом нет ничего плохого. Просто не забудьте сделать это :)

  2. QLineEdit уже обрабатывает свои собственные нажатия клавиш. Нет необходимости переопределять эту функциональность.

  3. Соединения сигнальных слотов должны быть статическими, если ваше приложение не меняет состояния. Если вы подключаете сигнал на объект к слоту на другом объекте несколько раз, тогда слот будет вызываться столько раз, сколько есть соединений.

  4. Идиоматический способ передачи данных между парой 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 - нет.

  • 0
    это показывает эту ошибку: QObject :: connect: Невозможно соединить QLineEdit :: textEdited (QString) с (null) :: seText (s) У меня есть открытые слоты: void seText (QString q); в моем dialog.h и void Dialog :: seText (QString q) {ui-> qwe-> setText (q); } в dialog.cpp
  • 0
    Вы уверены, что подключаетесь к ненулевому объекту? Потому что ошибка говорит вам, что вы есть. Возможно, вам нужно переместить setupUi перед подключением.
0

немного поздно, но для других, которые приходят посмотреть эту страницу, вы можете посмотреть немного (~ 30 минут!) видео youtube, которое я подготовил...

(показывает: подключение к базе данных, диалоги, сигнал и слоты между диалогами,...)

https://www.youtube.com/watch?v=TEq15So3fUg

Ура!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню