Russian Qt Forum

Qt => Общие вопросы => Тема начата: hoja от Ноябрь 07, 2010, 22:35



Название: ui textedit
Отправлено: 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


мы сами люди не местные поможите кто чем может)))


Название: Re: ui textedit
Отправлено: UVV от Ноябрь 08, 2010, 08:19
Ui не надо использовать в main.
И что такое converter?


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


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 09, 2010, 01:12
Ui не надо использовать в main.
И что такое converter?

так форма называется


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 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;
    }
}


так?

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



тяжко после билдера)) но интересно. а потмоу хочется разобраться


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 09, 2010, 01:47
и еще вопрос

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


пробовал

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

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

типа


Êðóïíî íàðåçàííûå ãðèáû


Название: Re: ui textedit
Отправлено: Пантер от Ноябрь 09, 2010, 10:13
Читай про QTextStream, а конкретно про void QTextStream::setCodec ( QTextCodec * codec )


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 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

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


Название: Re: ui textedit
Отправлено: Пантер от Ноябрь 09, 2010, 17:21
1. Файл в какой кодировке?
2. Приведи код с использованием QTextStream.


Название: Re: ui textedit
Отправлено: crossly от Ноябрь 09, 2010, 17:46
Цитировать
пробовал

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

вы либо не внимательно читали ассистент либо это тупо копи/паст.... прочитайте что такое tr().... он тут совершенно не причем.... и лучше последуйте совету Пантера и разберитесь с QTextStream


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 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 окрывает их нормально


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


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 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())));





текст стал русским.
всем спасибо за советы. вопросы решены)) эти. думаю еще не раз будут другие


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


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 10, 2010, 09:59
может и ересь но мой вариант работает тоже)


Название: Re: ui textedit
Отправлено: Пантер от Ноябрь 10, 2010, 10:05
*WALL*
Даже сказать культурного нечего. Промолчу.


Название: Re: ui textedit
Отправлено: Sahab от Ноябрь 10, 2010, 10:38
на костер еретика) ;D


Название: Re: ui textedit
Отправлено: hoja от Ноябрь 10, 2010, 17:11
на костер еретика) ;D

а все таки она вертится ;)