Russian Qt Forum
Март 28, 2024, 16:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Не получается маленькая программа на основе TextEdit
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Не получается маленькая программа на основе TextEdit (Прочитано 3886 раз)
ussed
Гость
Не получается маленькая программа на основе TextEdit
«
:
Август 31, 2014, 14:09 »
В текстовое поле из clipboard помещается текст,
в нем все буквы 'a' поменять на буквы 'b'
Код:
//maiwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui>
#include <QMainWindow>
#include <QPlainTextEdit>
#include <QAction>
#include <QByteArray>
#include <QLabel>
#include <QErrorMessage>
QT_BEGIN_NAMESPACE
class QPlainTextEdit;
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
QByteArray buf;
QErrorMessage lbl;
private:
QPlainTextEdit *textEdit;
private slots:
void myslot()
{
lbl.showMessage("hhh");
lbl.exec();
//delay 5 sec
for(int i=0;i<buf.size();i++)
{
if (buf.at(i) == '1')
buf = '2';
}
}
};
#endif // MAINWINDOW_H
---------------------
//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
buf.resize(1000);
textEdit = new QPlainTextEdit(buf);
setCentralWidget(textEdit);
connect(textEdit->document(),SIGNAL(textChanged()),this,SLOT(myslot()));
}
MainWindow::~MainWindow()
{
;
}
//////fffffaaccccc
/*
if( textEdit->canPaste())
{
lbl.showMessage("hhh");
// lbl.exec();
//delay 5 sec
for(int i=0;i<buf.size();i++)
{
if (buf.at(i) == 'a')
buf = 'b';
}
}
*/-------------------------
//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
«
Последнее редактирование: Август 31, 2014, 16:21 от ussed
»
Записан
Bepec
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #1 :
Август 31, 2014, 14:18 »
Это печально. Но раз это факт, а не вопрос, то просто пройду мимо
PS оформляем код в тег кнопкой "#" на панельке.
update: Прекрасно, уже красивее. А теперь осталось добавить вопрос / просьбу/ обсуждение. Привести проблему. Если есть ошибки, привести полный текст ошибки.
update_2: теперь, в вышеприведённом коде, оформленном нормально я сразу вижу ошибку. Но вышенаписанное всё же сделайте. Вы же хотите, чтоб вам помогали
Ошибка у вас в том, что в
Код:
if (buf.at(i) == '1')
buf = '2';
вы присваиваете массиву '2', а не элементу.
«
Последнее редактирование: Август 31, 2014, 16:41 от Bepec
»
Записан
ussed
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #2 :
Август 31, 2014, 20:30 »
Посьба помочь решить задачу!
Конечно buf
='2'; так в исходном коде.
но при переносе кода в '#' пропали квадратные скобки .
При построении никаких ошибок не показано.
Самое главное OS Archlinux(64),Qt 5.3;
При помещении тестовой строки в окно ,не происходит
ожидаемой замены.
Наставление для новичков настраивает на лаконичность.
«
Последнее редактирование: Август 31, 2014, 20:36 от ussed
»
Записан
Bepec
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #3 :
Август 31, 2014, 20:42 »
Тут проблема в другом, хотя и эту решили
Концепция проста - у вас в buf ничего нет. И не было. Вы его не заполняете.
QPlainTextEdit'у в конструкторе передаётся строка, которую он помещает В себя и потом напрочь о ней забывает.
В результате у вас при запуске buf пуст более, чем полностью. Что делать?
(псс: делаю скидку на 1 тему, так сказать Welcome)
ps счас накропаю рабочий проект, 5 минут.
Записан
Bepec
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #4 :
Август 31, 2014, 20:55 »
Ошибки -
непонимание работы QPlainTextEdit и неправильное соединение
connect(textEdit
->document()
,SIGNAL(textChanged()),this,SLOT(myslot()));
Что ещё? Ещё не учтено зацикливание.
При изменении текста будет испускаться сигнал изменения и вызываться слот, который будет изменять текст и будет испускаться сигнал изменения и вызываться слот, который будет изменять текст и будет испускаться сигнал изменения и вызываться слот, который будет изменять текст и будет испускаться сигнал изменения и вызываться слот, который будет изменять текст и... Ну и так до переполнения и вылета
Проблема решается стражем - boolean переменной, которая при работе слота блокируется и разблокируется в конце.
h
Код:
#ifndef TESTPLAIN_H
#define TESTPLAIN_H
#include <QtWidgets/QMainWindow>
#include <QPlainTextEdit>
#include "ui_testplain.h"
class testPlain : public QMainWindow
{
Q_OBJECT
public:
testPlain(QWidget *parent = 0);
~testPlain();
private:
Ui::testPlainClass ui;
QPlainTextEdit * textEdit;
bool work;
private slots:
void mySlot()
{
if (!work)
{
work = true;
QString content = textEdit->toPlainText();
content.replace("a", "b");
textEdit->clear();
textEdit->appendPlainText(content);
work = false;
}
}
};
#endif // TESTPLAIN_H
cpp
Код:
#include "testplain.h"
testPlain::testPlain(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
textEdit = new QPlainTextEdit;
work = false;
setCentralWidget(textEdit);
connect(textEdit,SIGNAL(textChanged()),this,SLOT(mySlot()));
}
testPlain::~testPlain()
{
}
Записан
ussed
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #5 :
Август 31, 2014, 21:04 »
"Концепция проста - у вас в buf ничего нет. И не было. Вы его не заполняете."
Да ,но я же помещаю по"paste"(правая кнопка мыши) текст.
Зацикливания по моему не должно быть,так как после первой замены уже ничего втексте не будет меняться.
хотя согласен,один дополнительный не рабочий проход будет
Спасибо за предложенное,надо осмыслить,завтра на работе попробую.
«
Последнее редактирование: Август 31, 2014, 21:12 от ussed
»
Записан
Bepec
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #6 :
Август 31, 2014, 21:07 »
Вы не понимаете...
Чтобы заполнить массив надо сделать
buf =
У вас в коде где нибудь ДО момента замены оно встречается?
Массив buf НЕ связан с QPlainTextEdit. QPlainTextEdit даже не знает о его существовании, ибо в конструкторе происходит неявная инициализация класса QString, которое превращает buf в локальную QString и помещает в QPlainTextEdit.
PS Зацикливание будет. Но рано говорить об этом, вы ещё не видите как работают классы Qt( а точнее вообще не знаете
)
Записан
ussed
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #7 :
Сентябрь 01, 2014, 17:33 »
Спасибо,работает,только закоментировал "ui:..." он мне не нужен.
Записан
Bepec
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #8 :
Сентябрь 01, 2014, 18:06 »
На здоровье. Закомментив ui ничего не теряем, так что на здоровье
Записан
ussed
Гость
Re: Не получается маленькая программа на основе TextEdit
«
Ответ #9 :
Сентябрь 17, 2014, 21:09 »
В принципе работает!
но есть вопросы. Если строку в mainwindow.h " work = true;"перенести на строку после "textEdit->setPlainText(content);"
то задача вылетает.С точки зрения процедурного программирования этот перенос совершенно нейтральный.
Код:
#ifndef TESTPLAIN_H
#define TESTPLAIN_H
#include <QtWidgets/QMainWindow>
#include <QPlainTextEdit>
#include <QDebug>
#include <QTextCodec>
#include <QChar>
#include <QTextStream>
#include <string.h>
#include <stdlib.h>
class testPlain : public QMainWindow
{
Q_OBJECT
public:
testPlain(QWidget *parent=0);
~testPlain();
private:
QPlainTextEdit * textEdit;
bool work;
QString content;
QByteArray bf;
int transform_content(QString &content);
private slots:
void mySlot()
{
if (!work)
{
content=textEdit->toPlainText();
work = true;
// QTest::qWait(10000);
transform_content(content);
textEdit->clear();
textEdit->setPlainText(content);
}
}
};
#endif // TESTPLAIN_H
//=======================
#include "mainwindow.h"
testPlain::testPlain(QWidget *parent)
: QMainWindow(parent)
{
textEdit = new QPlainTextEdit;
bf.resize(1000);
work = false;
setCentralWidget(textEdit);
connect(textEdit,SIGNAL(textChanged()),this,SLOT(mySlot()));
}
testPlain::~testPlain()
{
}
int testPlain::transform_content(QString &content)
{
int i,j;
bf=content.toLocal8Bit();
i=bf.size();
float par1,par2,par3,par4,par5,par6,z1,z2,z3;//,a,b;
j=0;
for(i=bf.size();i>0;i--)
{
if( qstrncmp( "tion",bf.data()+i,4)==0 && !j)
{
j++;
i--;
}
if( qstrncmp( "tion",bf.data()+i,4)==0 && j==1)
{;
sscanf((char*)(bf.data()+i),"tion %f %f %f %*s",&par1,&par2,&z1);
j++;
i--;
}
if( qstrncmp( "tion",bf.data()+i,4)==0 && j==2)
{
sscanf((char*)(bf.data()+i),"tion %f %f %f %*s",&par3,&par4,&z2);
j++;
i--;
}
if( qstrncmp( "tion",bf.data()+i,4)==0 && j==3)
{
j++;
i--;
}
if( qstrncmp( "tion",bf.data()+i,4)==0 && j==4)
{
sscanf((char*)(bf.data()+i),"tion %f %f %f %*s",&par5,&par6,&z3);
j++;
i--;
}
if(j==5)
break;
}
bf.clear();
QTextStream(&bf)<<"par1"<<par1;
content.clear();
content.prepend(bf);
return 0;
}
//========================================
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
testPlain w;
w.show();
return a.exec();
}
«
Последнее редактирование: Сентябрь 17, 2014, 21:11 от ussed
»
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...