Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, Qt] Automatyczne kopiowanie tekstu po jego zmianie

Ostatnio zmodyfikowano 2014-12-24 15:53
Autor Wiadomość
kitsss
Temat założony przez niniejszego użytkownika
[C++, Qt] Automatyczne kopiowanie tekstu po jego zmianie
» 2014-12-24 15:11:47
2 dzień poznaje bibliotekę Qt i mam pewien problem. Otóż jak zrobić automatyczne skopiowanie zawartości pierwszego okienka tekstowego (tuż po tym, jak użytkownik coś tam wpisał) do drugiego?

Plik nagłówkowy:
C/C++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QTextStream>
#include <QPushButton>
#include <QString>
#include <QTextEdit>


namespace Ui {
    class MainWindow;
}

class MainWindow
    : public QMainWindow
{
    QTextEdit * editor, * textout;
   
    Q_OBJECT
   
public:
    explicit MainWindow( QWidget * parent = 0 );
    ~MainWindow();
   
private:
    Ui::MainWindow * ui;
};

#endif // MAINWINDOW_H

Plik .cpp:
C/C++
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
     , ui( new Ui::MainWindow )
{
    ui->setupUi( this );
    setMinimumSize( 750, 500 );
    setMaximumSize( 1750, 1500 );
    setGeometry( 300, 200, 1000, 700 );
   
   
   
    editor = new QTextEdit( this );
    editor->setGeometry( 400, 100, 200, 50 );
   
    textout = new QTextEdit( this );
    textout->setGeometry( 400, 400, 200, 100 );
   
   
   
    connect( editor, SIGNAL( textChanged() ), textout, SLOT(...???...) );
   
}


MainWindow::~MainWindow()
{
    delete ui;
}
P-123299
sajmon
» 2014-12-24 15:20:36
Musisz zdefiniować slot
C/C++
private slots:
void mojSlot();
Podem połączyć sygnał z twoim slotem
connect( editor, SIGNAL( textChanged() ), this, SLOT( mojSlot() ) );
I na koniec
C/C++
void MainWindow::mojSlot() {
    // tutaj operacje które chcesz wykonać po otrzymaniu sygnału textChanged()
}

Jak widzisz slot to zwykła medota ale żeby Qt wiedziało że tą metodę chcesz wykorzystać jako slot musisz ją zdefiniować w private slots
P-123300
kitsss
Temat założony przez niniejszego użytkownika
» 2014-12-24 15:53:09
W pliku nagłówkowym dodałem deklaracje metody pod private slots:   
moj_slot();

W pliku .cpp dodałem definicje tej funkcji:
C/C++
void MainWindow::moj_slot()
{
    this->textout->clear();
    this->textout->insertPlainText( this->editor->toPlainText() );
}
i w konstruktorze wywołuje sygnał tak:
C/C++
connect( editor, SIGNAL( textChanged() ), this, SLOT( moj_slot() ) );
Działa! O to mi chodziło, co modyfikacja okienka tekstowego wejściowego wykonuje się automatyczne kopiowanie, po czym wklejanie w drugie okienko tekstowe.
Dzięki wielkie, sorry za banalne pytanie ale dopiero z tym ruszam i nie wpadłem na definiowanie własnego slotu (prędzej myślałem o zagniezdzaniu sygnałów).
P-123301
« 1 »
  Strona 1 z 1