Russian Qt Forum
Февраль 10, 2012, 15:39
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
(Модератор:
Sergeich
) >
Сигналы и слоты,
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сигналы и слоты, (Прочитано 887 раз)
diduz
Новичок
Offline
Сообщений: 12
Сигналы и слоты,
«
:
Июль 29, 2010, 21:25 »
Здравствуйте,недавно начал изучать QT, хочу написать простую прогу->окошко с 2 QTextEdit в 1 можно вводить все а в другое только цифры.проблема: поймать момент когда пользователь вводит тект в QTextEdit, я знаю о сигнале textChanged() но я создавал свои класс и из него уже не могу воспользоваться этим сигналом.
Код:
#include "Textnum.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Textnum tn;
tn.connect(tn.gettext(),SIGNAL(tn.gettext().textChanged()),tn,SLOT(textslot()));//собственно тут //проблема ,строка с ошибкой, как исправить не знаю.
tn.show();
return app.exec();
}
//========================================================
#ifndef TEXTNUM_H
#define TEXTNUM_H
#include <QtGui>
class Textnum : public QWidget {
Q_OBJECT
private:
QLabel* lblText;
QTextEdit* txtText;
QLabel* lblNum;
QTextEdit* txtNum;
public:
Textnum(QWidget* pwgt=0);
bool Checknum();
QTextEdit gettext();
public slots:
void textslot();
};
#endif // TEXTNUM_H
//===================================================
#include "Textnum.h"
Textnum::Textnum(QWidget *pwgt):QWidget(pwgt){
lblText= new QLabel("&Text and Num");
txtText= new QTextEdit();
lblText->setBuddy(txtText);
lblNum = new QLabel("&Num");
txtNum=new QTextEdit("546");
lblNum->setBuddy(txtNum);
QVBoxLayout* vbl1= new QVBoxLayout;
vbl1->addWidget(lblText);
vbl1->addWidget(txtText);
QVBoxLayout* vbl2= new QVBoxLayout;
vbl2->addWidget(lblNum);
vbl2->addWidget(txtNum);
QHBoxLayout* hblayout= new QHBoxLayout;
hblayout->addLayout(vbl1);
hblayout->addLayout(vbl2);
setLayout(hblayout);
}
bool Textnum::Checknum(){
QString str;
QPalette pal=txtNum->palette();
bool f=true;
str=txtNum->toPlainText();
for(int i=0;i<str.length();++i){
if(str.at(i).isNumber()){
}
else{
f=false;
}
}
return f;
}
QTextEdit Textnum::gettext(){
return txtNum;
}
Textnum::textslot(){
if(Checknum()){
QMessageBox::information(0,"this","num");
}
else{
QMessageBox::information(0,"this","notnum");
}
}
Записан
Mikhail
Бывалый
Offline
Сообщений: 473
Re: Сигналы и слоты,
«
Ответ #1 :
Июль 29, 2010, 21:42 »
Зачем же так извращаться.
Есть такой метод для QTextEdit
void QTextEdit::keyPressEvent ( QKeyEvent * e ) [virtual protected]
Переопредели его в своем редакторе и все получится.
Записан
http://www.anyqsoft.com
SimpleSunny
Крякер
Online
Сообщений: 357
Малевич
Re: Сигналы и слоты,
«
Ответ #2 :
Июль 29, 2010, 22:08 »
Цитата: Mikhail от Июль 29, 2010, 21:42
Зачем же так извращаться.
Есть такой метод для QTextEdit
void QTextEdit::keyPressEvent ( QKeyEvent * e ) [virtual protected]
Переопредели его в своем редакторе и все получится.
А если пользователь мышкой вставит текст?
Записан
"There must have been a moment at the beginning, where we could have said no. But somehow we missed it. Well, we'll know better next time." ©
Vyacheslav Yurkov
Крякер
Offline
Сообщений: 327
Re: Сигналы и слоты,
«
Ответ #3 :
Июль 30, 2010, 08:35 »
Код:
tn.connect(tn.gettext(), SIGNAL(textChanged()), tn, SLOT(textslot()));
Записан
NicK
Самовар
Offline
Сообщений: 102
Re: Сигналы и слоты,
«
Ответ #4 :
Июль 30, 2010, 09:36 »
а просто валидатор поставить не вариант?
Записан
Mikhail
Бывалый
Offline
Сообщений: 473
Re: Сигналы и слоты,
«
Ответ #5 :
Июль 30, 2010, 09:42 »
Цитата: SimpleSunny от Июль 29, 2010, 22:08
Цитата: Mikhail от Июль 29, 2010, 21:42
Зачем же так извращаться.
Есть такой метод для QTextEdit
void QTextEdit::keyPressEvent ( QKeyEvent * e ) [virtual protected]
Переопредели его в своем редакторе и все получится.
А если пользователь мышкой вставит текст?
Для этого случая переопределить следующий слот
void QTextEdit::paste () [slot]
Pastes the text from the clipboard into the text edit at the current cursor position.
If there is no text in the clipboard nothing happens.
To change the behavior of this function, i.e. to modify what QTextEdit can paste and how it is being pasted, reimplement the virtual canInsertFromMimeData() and insertFromMimeData() functions.
Записан
http://www.anyqsoft.com
whirlwind
Чайник
Offline
Сообщений: 92
Re: Сигналы и слоты,
«
Ответ #6 :
Июль 30, 2010, 10:06 »
Цитата: NicK от Июль 30, 2010, 09:36
а просто валидатор поставить не вариант?
метод setValidator() есть только у QLineEdit. Хотя, возможно, топикстартеру именно его и хотелось бы использовать
Записан
HaySayCheese
Самовар
Offline
Сообщений: 154
Re: Сигналы и слоты,
«
Ответ #7 :
Июль 30, 2010, 12:33 »
Народ, что вы накинулись, человк же написал, что
только начинает изучать Qt
и по видимум С++ тоже. Отнеситесь с пониманием к этому.
Код:
tn.connect(tn.gettext(),SIGNAL(tn.gettext().textChanged()),tn,SLOT(textslot()))
вот этот код луше перенести в конструктор класса (если не знаешь что это - почитай в инете, или пиши в ЛС), и немного причесать
, что-то типа такого:
Код:
connect(this->lineEdit1,SIGNAL(textChanged()),this,SLOT(textslot()))
Прости, твой код не перечитывал, но, думаю, смысл понятен.
Записан
diduz
Новичок
Offline
Сообщений: 12
Re: Сигналы и слоты,
«
Ответ #8 :
Июль 30, 2010, 12:35 »
Спасибо что так быстро откликнулись, я теперь знаю о существовании валидаторов и keyPressEvent
Но моя цель была разобраться с сигналами и слотами, решил проблему прописав
Код:
connect(txtNum,SIGNAL(textChanged()),SLOT(textslot()));
в классе непосредственно после создания QTextEdit.
Записан
diduz
Новичок
Offline
Сообщений: 12
Re: Сигналы и слоты,
«
Ответ #9 :
Июль 30, 2010, 12:36 »
спасибо JamS007
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...