Russian Qt Forum
Сентябрь 30, 2024, 12:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: ui textedit  (Прочитано 10234 раз)
hoja
Гость
« : Ноябрь 07, 2010, 22:35 »

недавно перешол на убунту. пытаюсь разобраться в qt 4. до этого винда и сибилдер

столкнулся с проблемой. искал тут на форуме и еще на нескольких форумах. в бланшете и других книгах. но так и не понял как правильно обращатся к виджетам в форме

использую qt creator

в нем создаю форму с виджетом textEdit

хочу прочитать файл и загрузить в этот виджет

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    converter w;
   

    QFile file("1.txt");
       if (file.open(QIODevice::ReadOnly))
           ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
    w.show();
    return a.exec();
}
но выдает ошибку

 error: ‘ui’ was not declared in this scope

вставил в main 

Ui::converter ui;

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    converter w;
    Ui::converter ui;

    QFile file("1.txt");
       if (file.open(QIODevice::ReadOnly))
           ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
    w.show();
    return a.exec();
}
стало выдавать

 error: base operand of ‘->’ has non-pointer type ‘Ui::converter’

если поставить не
           ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));

а

           ui.textEdit->setPlainText(QString::fromUtf8(file.readAll()));

то ошибку не выдает

но программа завершается с ошибкой

Программа неожиданно завершилась.
test завершился с кодом 0

при отладке на этой строке выдает - приложение остановлено так как получило сигнал от операционной системы. Сигнал SIGSEGV


мы сами люди не местные поможите кто чем может)))
Записан
UVV
Гость
« Ответ #1 : Ноябрь 08, 2010, 08:19 »

Ui не надо использовать в main.
И что такое converter?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Ноябрь 08, 2010, 08:21 »

Плохо читал.
Код
C++ (Qt)
   QFile file("1.txt");
      if (file.open(QIODevice::ReadOnly))
          ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
 
Перенеси в конструктор converter и будет тебе счастье.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hoja
Гость
« Ответ #3 : Ноябрь 09, 2010, 01:12 »

Ui не надо использовать в main.
И что такое converter?

так форма называется
Записан
hoja
Гость
« Ответ #4 : Ноябрь 09, 2010, 01:17 »

Плохо читал.
Код
C++ (Qt)
   QFile file("1.txt");
      if (file.open(QIODevice::ReadOnly))
          ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
 
Перенеси в конструктор converter и будет тебе счастье.

т.е. убрать из main и вставить в

Код:
converter::converter(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::converter)
{
    ui->setupUi(this);
 QFile file("1.txt");
       if (file.open(QIODevice::ReadOnly))
           ui->textEdit->setPlainText(QString::fromUtf8(file.readAll()));
}

converter::~converter()
{
    delete ui;
}

void converter::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


так?

если не так просто можешь простейший проект(работающий) для считывания файла и вставку его содержимого в текстовое поле показать?



тяжко после билдера)) но интересно. а потмоу хочется разобраться
« Последнее редактирование: Ноябрь 09, 2010, 01:21 от hoja » Записан
hoja
Гость
« Ответ #5 : Ноябрь 09, 2010, 01:47 »

и еще вопрос

QString::fromUtf8(file.readAll())  чем можно заменить если читаемые файлы - в виндовой кодировке.


пробовал

    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QTextCodec::setCodecForTr(codec);

но как было кракозябрами так и осталось

типа


Êðóïíî íàðåçàííûå ãðèáû
« Последнее редактирование: Ноябрь 09, 2010, 02:22 от hoja » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Ноябрь 09, 2010, 10:13 »

Читай про QTextStream, а конкретно про void QTextStream::setCodec ( QTextCodec * codec )
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hoja
Гость
« Ответ #7 : Ноябрь 09, 2010, 17:16 »

так читал в хелпе

там
Apple Roman
Big5
Big5-HKSCS
CP949
EUC-JP
EUC-KR
GB18030-0
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 to 10
ISO 8859-13 to 16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
JIS X 0201
JIS X 0208
KOI8-R
KOI8-U
MuleLao-1
ROMAN8
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
Windows-1250 to 1258
WINSAMI2

что не подставлял. все равно кракозябры
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Ноябрь 09, 2010, 17:21 »

1. Файл в какой кодировке?
2. Приведи код с использованием QTextStream.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
crossly
Гость
« Ответ #9 : Ноябрь 09, 2010, 17:46 »

Цитировать
пробовал

    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QTextCodec::setCodecForTr(codec);

вы либо не внимательно читали ассистент либо это тупо копи/паст.... прочитайте что такое tr().... он тут совершенно не причем.... и лучше последуйте совету Пантера и разберитесь с QTextStream
Записан
hoja
Гость
« Ответ #10 : Ноябрь 10, 2010, 05:51 »

файлы в виндусовой кодировке. созданы блокнотом в винде

код вот

Код:
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QTextCodec::setCodecForTr(codec);
    ui->setupUi(this);
    QFile file("17.txt");
       if (file.open(QIODevice::ReadOnly))
           ui->textEdit->setPlainText(QString(file.readAll()))

в поле возникает то что я показал. кракозябры

т.е. я фактически считываю файл (в виндусовой кодировке) и хочу отобразить его содержимое в текстовом поле в форме

просто файлов около 3500. руками их открывать долго. gedit окрывает их нормально
« Последнее редактирование: Ноябрь 10, 2010, 06:01 от hoja » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Ноябрь 10, 2010, 08:18 »

Еще раз повторю: используй QTextStream и ему устанавливай кодировку. А QTextCodec::setCodecForTr(codec); тут совершенно не при чем.
« Последнее редактирование: Ноябрь 10, 2010, 08:20 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hoja
Гость
« Ответ #12 : Ноябрь 10, 2010, 08:50 »

 причем причем


Код:
   QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(codec);
    ui->setupUi(this);
    QFile file("17.txt");
       if (file.open(QIODevice::ReadOnly))
           ui->textEdit->setPlainText(QString(tr(file.readAll())));





текст стал русским.
всем спасибо за советы. вопросы решены)) эти. думаю еще не раз будут другие
« Последнее редактирование: Ноябрь 10, 2010, 08:53 от hoja » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Ноябрь 10, 2010, 09:56 »

Ты, конечно, извини, но пишешь всякую ересь. Так тяжело было в ассистенте почитать?
Код
C++ (Qt)
QFile file("17.txt");
QTextStream stream (&file);
stream.setCodec ("CP2151");
ui->textEdit->setPlainText(stream.readAll());
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hoja
Гость
« Ответ #14 : Ноябрь 10, 2010, 09:59 »

может и ересь но мой вариант работает тоже)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 20.