Просмотр сообщений
|
Страниц: [1] 2 3
|
1
|
Qt / Вопросы новичков / Re: Русский язык в qt. Как локализировать выполнения функций.
|
: Июнь 24, 2020, 13:52
|
литерал работает только с константами. в данном случае у тебя будет просто QString: C++ (Qt) auto rusStr = fd.getSaveFileName();
Таким способом русские буквы опять будут выводиться саша так. Просто дальше, у меня будет выводится путь в лейбле, этим rusStr. И из него будет браться текст в стринговую переменную, чтобы с текстом можно было манипулировать. Текст будет переводится в const char*, чтобы он для _mkdir подошёл из #include <direct.h>, для создания папки. Однако стринговая переменная, которая хранит путь с именем, будет идти дальше по коду, чтобы в файловых потоках, файлы создавались в этой новой папке. Всё ломается, чисто, когда пользователь вводит русские символы или путь до папки имеет русские буквы.
|
|
|
3
|
Qt / Вопросы новичков / Re: Русский язык в qt. Как локализировать выполнения функций.
|
: Июнь 23, 2020, 20:07
|
А как быть в случае если используется QFileDialog ? QFileDialog fd; auto rusStr = QStringLiteral(fd.getSaveFileName()); Жалуется на fd, что скобки не закрыл. По идеи, такая конструкция, вызовет диалоговое окно, в котором пользователь укажет путь сохранения. Переменная должна его запомнить с русскими словами и дальше её можно пихать в обработки.
|
|
|
4
|
Qt / Вопросы новичков / Re: Русский язык в qt. Как локализировать выполнения функций.
|
: Июнь 14, 2020, 14:33
|
Да, я учу си++ и qt. Но кроме как посмотреть все видюшки с ютуба и тыкаться в документации, иного способа кроме как задавать свои вопросы на форумах и везде в надежде что ответят, у меня нету. Потому что документации слишком гиганские, а видюшки с ютуба не полные, даже англоязычные. Вот, благодаря ВАААС, я победил чуды и знать, что такое тип данных auto. На самом деле, меня убило. что существует фигня, которая определяет тип за тебя, с другой стороны, нафига? В любом случае, обрабатывать переменную, по её типу придётся. Я бы даже сказал, благодаря этой фигне. можно будет запутаться, а какой же тип присвоила эта auto. Я так понимаю, тут она присвоила Qstring?
|
|
|
6
|
Qt / Вопросы новичков / Русский язык в qt. Как локализировать выполнения функций.
|
: Июнь 13, 2020, 07:20
|
Искал локализейт для qt и нашёл две строчки, одна из которых по идеи делает setlocate для qt, а вторая, ну просто для проверки. Я сделал из этого кнопку, которая заменяет лэйбл на фразу во второй строчке. Но к сожалению, как была каша из символов, так и остаётся. Сразу скажу, что мне локализация нужна, например чтобы считывать с полей русские слова, используя их как название будущего файла, переваривать в путь и формат файла(собственно это делать я знаю как, но попытка ввести русское слово в поле, собственно не переварит всё что написано на кириллице(получится какой нибудь D/file/СѓСЃСЃРєРёР№.txt). Насколько я понял, не переваривание происходит уже тогда, когда мы берём и записываем в string'овую переменную с любого лейбла или поля(то есть и весь остальной функционал, кроме вставок в саму программу, то есть в редакторе форм/действий) будет искажён. Я бы хотел чтобы Любые считывания или записи могли делаться на русском. #include <QTextCodec> void MainWindow::on_pushButton_2_clicked() { QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251")); //Найденные QString cyrillicName = QString::fromLocal8Bit("словоНаКириллице"); //строчки ui->label->setText(cyrillicName); }
|
|
|
7
|
Qt / Вопросы новичков / Re: Как проверить, пуста ли EditLine?
|
: Июнь 12, 2020, 21:20
|
Так, эта штука делает текст серым и как бы не существующем. На всякий случай хочу уточнить: Если пользователь не будет менять текст в этом лайнэдите, то этот текст будет считываться как обычно(то есть как введённый текст)?
|
|
|
8
|
Qt / Вопросы новичков / Re: Открытие/загрузка файла.
|
: Июнь 12, 2020, 17:59
|
И какие функции там использовать, их довольно много. Может еще и мамину сисю дать? Не пытайтесь "на шару", читайте букварь А может тогда форум с вопросами новичков удалить, а вместо него поставить табличку "читайте букварь"? Окей, я разобрался. В чём была проблемма, просто написать: добавьте библиотеку <QFileDialog>, создайте объект его класса и примените к нему метод getOpenFileName(). А остальные методы ищите по вот сылке.
|
|
|
9
|
Qt / Вопросы новичков / Re: Как проверить, пуста ли EditLine?
|
: Июнь 12, 2020, 17:33
|
И что этот рабочий пример делает? Насколько я понял, добавляет виджет, но судя по h файлу, виджет мышки которая может удалять. Рабочий пример: lineed.h:C++ (Qt) #ifndef LINEED_H #define LINEED_H #include <QtWidgets> class LineEd : public QLineEdit { protected: virtual void mousePressEvent(QMouseEvent*) { clear(); } public: LineEd(QWidget *wgt = 0) : QLineEdit(wgt) {} }; #endif // LINEED_H main.cpp:C++ (Qt) #include <QtWidgets> #include "lineed.h" int main(int argc, char** argv) { QApplication app(argc, argv); QWidget wgt; LineEd *LnEd = new LineEd; QVBoxLayout* vLayout = new QVBoxLayout; vLayout->addWidget(LnEd); wgt.setLayout(vLayout); wgt.show(); return app.exec(); }
Мне просто нужно, когда пользователь в первый раз нажимал на это поле с него стиралось фраза "Введите название". Естественно. я надеялся, что в момент нажатия на поле ввода, посылается сигнал. что поле стало активным, что с ним начали работать или что то в этом духе, чтобы потом слотом сделать settext(""); и всё. Не понимаю, что даёт переопределение mouseЕvent'a.
|
|
|
11
|
Qt / Вопросы новичков / Открытие/загрузка файла.
|
: Июнь 12, 2020, 12:11
|
Во многих программах(например:paint), есть такая кнопка "открыть файл", после её нажатия, выпрыгивает проводник, который просит пользователя найти нужный файл. Собственно, как сделать такую кнопку?
|
|
|
12
|
Qt / Вопросы новичков / Как проверить, пуста ли EditLine?
|
: Май 29, 2020, 23:46
|
У меня есть поле, в которое по умолчанию записано число. Пользователь удаляет число, пока его не станет. Собственно, когда его нету, я бы хотел делать проверку, на пустое поле. static string x; x=ui->lineEdit->text().toStdString(); if(x==?????) А вообще, в случае. если у меня число в поле по умолчанию есть, а я хочу, чтобы при наведении на поле и нажатию по нему, текст исчезал, это какой сигнал?(понятно, что после этого, можно просто ui->settext(""); сделать). Проверка нужна чтобы после этого, пользователь может ввести в поле, что нибудь ещё, передумать, стереть и написать ещё раз.
|
|
|
13
|
Qt / Вопросы новичков / Re: Вывод сообщения в графический интерфейс из другого файла.
|
: Май 25, 2020, 18:14
|
Ты вызываешь из MainWindow свободную функцию, которая не имеет доступа к этому MainWindow. Сделай one членом класса MainWindow или передавай в one указатель на MainWindow C++ (Qt) void one (MainWindow *w) { w->vivod_na_ekran(10); } .......... one(this)
Да, с указателем, сработало. Спасибо.
|
|
|
14
|
Qt / Вопросы новичков / Re: Вывод сообщения в графический интерфейс из другого файла.
|
: Май 25, 2020, 16:44
|
А зачем ты делаешь MainWindow vivod? Что-то мне кажется, что у тебя опять напутано все в плане c++. Приведи минимальный полный код.
Это и есть минимальный полный код. Больше только весь код. но там добавить нечего. код кнопки: void MainWindow::on_pushButton_clicked() { one(); } Код метода, который выводит переменную. void MainWindow::vivod_na_ekran(int i){ ui->label->setText(QString::number(i)); } Код вызывающей функции: #include "mainwindow.h" #include <math.h>
#include <iostream> using namespace std;
#include "four.h" #include <stdlib.h>
void one(){ int i=12; MainWindow *vivod = new MainWindow; vivod->vivod_na_ekran(i); //vivod->show(); }
.h #ifndef FOUR_H #define FOUR_H void one(); #endif // FOUR_H Просто, выводится цифра, на подменённом экране, не закрывая старого даже. А проблема в том, что через подмену экрана я не могу реализовать. У меня внутри функции будет, что то типо счётчика загрузки.
|
|
|
15
|
Qt / Вопросы новичков / Re: Вывод сообщения в графический интерфейс из другого файла.
|
: Май 25, 2020, 15:41
|
Просто поменяй свой код на вот этот и проверь: void one(){ int i=0; MainWindow *vivod = new MainWindow; vivod->vivod_na_ekran(i); vivod->show(); }
Ну, в этом случае, появляется второй экран, который перегораживает первый, не позволяя с ним что либо делать. Если убрать vivod->show(), то останется обычный экран, на котором изменение текста не происходит.
|
|
|
|
|