crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику Sokoloff ::: Спасибо сказали: 49 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
5.9.2015, 8:20 Сборки под разные системы
Да еще, если надо собирать DEB-ы под несколько дистрибутивов и они должны несколько отличаться, например зависимости немного разные. То могу посоветовать мой препроцессор для сборки https://github.com/SokoloffA/makeDeb. Пример использования можно посмотреть здесь

ViGOur,
1.2.2014, 20:54 связь между терминалом и gui программой
Цитата(ht1515 @ 1.2.2014, 15:48) *
Но все равно result выдает все. И шапку и результат выполнения команды

А никто не обещал, что waitForStarted ждет пока программа будет готова принимать данные от пользователя, да еще и проскипает вводное сообщение. Для этого нужен искин. waitForStarted ждет пока ОС прочитает экзешник, выделит всякие PID-ы и.т.п, т.е. чисто на низком уровне. А дальше сам читаешь и парсишь.

Цитата(ht1515 @ 1.2.2014, 15:48) *
и даже (gdb)>

А чем "(gdb)>" отличается от другого текста? Обычная строка, только без перевода каретки.

Я накидал простой пример класса работы с gdb

#ifndef GDB_H
#define GDB_H

#include <QObject>
class QProcess;

class Gdb : public QObject
{
    Q_OBJECT
public:
    explicit Gdb(QObject *parent = 0);

    bool run();
signals:

public slots:

private slots:
    void procOutDataReady();
    void procErrDataReady();

private:
    QProcess *mProc;
    QByteArray mStdOutBuf;
    QByteArray mStdErrBuf;
    bool mSkip;
};

#endif // GDB_H



#include "gdb.h"
#include <QProcess>
#include <QDebug>
#include <QInputDialog>
#include <QMessageBox>

/************************************************

************************************************/
Gdb::Gdb(QObject *parent) :
    QObject(parent),
    mProc(new QProcess(this))
{
}

/************************************************

************************************************/
bool Gdb::run()
{
    mProc->start("gdb");
    mSkip = true;
    if (!mProc->waitForStarted())
        return false;

    connect(mProc, SIGNAL(readyReadStandardOutput()),
            this, SLOT(procOutDataReady()));

    connect(mProc, SIGNAL(readyReadStandardError()),
            this, SLOT(procErrDataReady()));

}


/************************************************

************************************************/
void Gdb::procOutDataReady()
{
    mStdOutBuf += mProc->readAllStandardOutput();
    if (mStdOutBuf.endsWith("(gdb) "))
    {
        if (!mStdErrBuf.isEmpty())
        {
            QMessageBox::warning(0, tr("Warning"), QString::fromLocal8Bit(mStdErrBuf));
            mStdErrBuf.clear();
        }

        bool ok;
        QString command = QInputDialog::getText(0, tr("Command"),
                                                QString::fromLocal8Bit(mStdOutBuf),
                                                QLineEdit::Normal, "", &ok);
        mStdOutBuf.clear();

        if (!ok)
        {
            mProc->write("quit\n");
            mProc->waitForFinished(5000);
        }
        else
        {
            command += '\n';
            mProc->write(command.toLocal8Bit());
        }

    }
}

/************************************************

************************************************/
void Gdb::procErrDataReady()
{
    mStdErrBuf += mProc->readAllStandardError();
}


Не совершай стандартной ошибки новичков, никто не гарантирует, что в момент вызова procOutDataReady, процесс успел выплюнуть весь текст, вполне возможна ситуация, процесс напечатал пол слова, и в этот момент Qt решило эти данные обработать. Т.е. readAllStandardOutput вернет на все данные, а все которые готовы на этот момент. Поэтому надо накапливать в буфере.

Я обрабатываю и STOUT и STDERR, причем немного по другому чем в моей программе. Возможно через события тебе будет удобнее.

Обрати внимание, QString хранит в юникоде, процесс выдает в локальной кодировке, обязательно преобразовывать через fromLocal8Bit и toLocal8Bit

При вводе команды, надо добавлять "\n".

Желательно завершать программу корректно, я посылаю "quit" в gdb и даю ему 5 сек. на завершение.

Я не скипаю приглашение, если надо, то можно добавить условие, и при первом вызове procOutDataReady не выводить текст.

ht1515,
1.2.2014, 0:11 связь между терминалом и gui программой
Все что я не комментирую правильно.

Цитата(ht1515 @ 31.1.2014, 21:46) *
Цитата
mProcess = new QProcess();
mProcess->setReadChannel(QProcess::StandardError);

создание объекта процесса и установка ??? канала на чтение ошибок?

У консольной программы есть 3 потока:
STDIN - входные данные, обычно он связан с клавиатурой, но может быть и чем то другим. Например "dir | sort" sort получает на вход выхлоп ls.
STDOUT - выходной, сюда печатаются обычные выходные данные.
STDERR - выходной, сюда выводятся сообщения об ошибках.
Деление между последними условное, так принято. И, если STDOUT все используют по назначению, то в STDERR выводят не только ошибки, а все что не должно путаться с STDOUT-ом. В моем случае на STDERR выводятся проценты выполнения работы. Именно они меня и интересуют, поэтому я говорю QProcess-у что его readXXX функции будут читать STDERR.

Цитата(ht1515 @ 31.1.2014, 21:46) *
Цитата
mProcess->closeWriteChannel();

закрыли процесс записи в консольку. Это имитация нажатия кнопки enter?

Нет это имитация окончания входного файла. Например если запустить программу "sort < file.txt", то sort будет читать данные из файла file.txt до тех пор пока он не кончится. А после уже отсортирует и выведет их, так вот closeWriteChannel это имитация окончания файла. Или в случае "dir | sort" окончание работы первой программы. Вот это тебе делать и не надо, не закрывай канал. А enter передается обычным переводом строки("\n").

Да, еще. Консольная программа может получать команды разными методами. Стандартный подход через STDIN, и тогда мой подход сработает. Но программа может сама обрабатывать нажатия клавиатуры, и тогда придется извращаться.
ht1515,
31.1.2014, 19:40 связь между терминалом и gui программой
Цитата(ht1515 @ 31.1.2014, 19:00) *
Всем привет!
Есть консольная программа - терминал. Там вводятся команды, выполняются и результат сразу же печатается в программе( н-р командная строка в винде ).
Я хочу ее связать с gui программой написанной на куте. Никакой сессии, общей памяти консольная программа не дает. Она подразумевает наличие оператора ПК, который тыкать будет команды.
Можно ли каким-нибудь хитрым способом передавать консольной проге команды, чтобы она их выполняла и потом получать ответ?


Никакого хитрого способа не надо, используй QProcess. Вот реальный пример из моей программы https://github.com/flacon/flacon/blob/maste...litter.cpp#L127 Смотри метод Splitter::doRun()
У меня, правда, немного другая ситуация, я запускаю программу, передаю в нее данные, закрываю STDIN, а потом читаю из STDOUT-а, но очень близко к твоему случаю, тебе не надо дергать closeWriteChannel.
ht1515,
22.2.2013, 14:55 QToolBar
Цитата(demaker @ 22.2.2013, 15:29) *
Ну это понятно, что addWidget();
А как мне получить указатель на toolbar, который уже есть в MainWindow?
А как форма создавалась в дизайнере? Если да, то тулбар это обычный виджет который лежит на форме, имя его уточни в дизайнере, по умолчанию toolBar. Доступ к нему стандартный как и к прочим виджетам на форме ui->toolBar

Если форма создается где то еще, и у тебя только указатель, то используй findChild или findChildren на форме. Что-то вроде
QToolBar *toolBar = mainForm->findChild<QToolBar *>(); // Если знаешь что тулбар только один
QList<QToolBar *> allToolBars = parentWidget.findChildren<QToolBar *>(); // Если их несколько

Ну а добавление/удаление через QMainWindow::addToolBar, QMainWindow::insertToolBar и QMainWindow::removeToolBar
demaker,
7.2.2013, 14:55 Drag and Drop demaker,
26.10.2012, 18:06 вопрос по toInt(&ok,0)
Цитата(qt_user @ 26.10.2012, 18:32) *
 qDebug()<<"param[3] = "<<param[3]<<"  "<<(quint32)param[3].toInt(&ok,0);


Цитата
param[3] = "3B" 0


param[3] - это QString. Почему он конвертируется в ноль командой (quint32)param[3].toInt(&ok,0);?


Цитата
If base is 0, the C language convention is used: If the string begins with "0x", base 16 is used; if the string begins with "0", base 8 is used; otherwise, base 10 is used.

http://www.doc.crossplatform.ru/qt/4.7.x/qstring.html#toInt

Поэтому или param должен быть "0x3B" или используй toInt(&ok, 16), или пиши регулярку и определяй базу сам.

Или, наверное самое простое
    bool ok;
    qint32 n = (quint32)(param[3].toInt(&ok,10));

    if (!ok)
        qint32 n = (quint32)(param[3].toInt(&ok,16));
qt_user,
4.10.2012, 12:47 Число ли в QString?
Цитата(iReset @ 4.10.2012, 13:27) *
Либо toDouble(), зависит от постановки.

А разве toDouble понимает не десятичные числа?

@ qt_user
Если это учебная задача, то возможно требуется использовать регулярные выражения, тогда:
bool check(const QString &s)
{
    QRegExp re("0x[0-9a-fA-F]+|0[0-7]*|[1-9][0-9]*");
    return re.exactMatch(s);
}


qt_user,
17.8.2012, 17:46 помогите с QRegExp
Цитата(electronik @ 17.8.2012, 18:09) *
получается что cap1="Вася Пупкин"
a cap2="1"


    QString str = QString::fromUtf8("12 Оля                  22");
    QRegExp re("(.*\\S)\\s+(\\d+)");

    if (re.exactMatch(str)) {
         QString name = re.cap(1);
         QString num = re.cap(2);
         qDebug() << "Name:" << name << " num:" << num;
    }

К сожалению в Qt нельзя указать жадность для конкретного квантификатора, поэтому (.*\\S)

P.s. не забывай удваивать слеши, не \ а \\
electronik,
8.8.2012, 19:20 QString length() vs count()
Сейчас посмотрел исходники Qt 4.7

class QString {
inline int size() const { return d->size; }                                                              
inline int count() const { return d->size; }      
}

inline int QString::length() const                                                                          
{ return d->size; }

Т.е. все три метода абсолютно одинаковы.
RazrFalcon,
8.8.2012, 11:06 OpenSSL AES SHA256
Цитата(balbes @ 8.8.2012, 11:21) *
Привет всем.
Появилась надобность использовать AES-256 и SHA256 шифрование для OpenSSL, в Qt 5.0 вроде есть SHA256, но мы работаем с Qt 4.6 и на 5.0 перейти возможности нет.
Может кто подскажет какую библиотеку, которая предоставляет данные методы шифрования? Или если есть в Qt - ткнет пальцем?

Посмотри на Qt Cryptographic Architecture http://delta.affinix.com/qca/
balbes,
13.7.2012, 16:24 Инсталлятор
Цитата(abc @ 13.7.2012, 15:35) *
а такая опция - если галка была нажата (тулбар установлен), то запустить программу с одним параметром, а если была снята, то с другим? мне нужно знать, возможно ли это с помощью стороннего инсталлятора, кто-нибудь это проворачивал? потому что либо мне браться за написание своего, либо копаться в чужих, такие дела)

Я вообще говорил про страницу выбора компонент - http://winscp.net/eng/data/media/screensho..._components.png
Т.е. есть 2 компонента
1. Программа (обязательный)
2. Тулбар (опциональный)

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

Но есть и другой вариант - http://winscp.net/eng/data/media/screensho...aller_tasks.png

abc,
15.5.2012, 12:24 выкини елку
Может пора сменить тему с зимней, мне вроде как по барабану, но немного странно смотрятся снежинки на кануне лета.

Идет бракоразводный процесс. Судья спрашивает мужа:
- Почему вы решили развестись?
- Понимаете, нудная она...
- Как это? Объясните.
- Ну вот представьте. Вы просыпаетесь, подходите к окну: Ах, какой чудесный день! На улице - первомайская демонстрация. У вас отличное настроение... А она ходит и нудит: «Выкинь елку, выкинь елку...»
ViGOur,
23.3.2012, 19:04 Book readers
Цитата(wiz29 @ 19.3.2012, 16:19) *
Недавно решил приобрести читалку, остановился на kindle 4.0 или sony prs-650. Не могу сделать выбор в сторону той или другой модели, слишком разные плюсы и минусы приведены во многих обзорах. Если у кого то есть опыт использования подобных устройств, пожалуйста отпишите свое мнение, с небольшими аргументами "за" или "против" той или иной модели.

Заранее спасибо.

Именно этих моделей у меня не было, но была 505 сонька, а сейчас третий киндл.

Экраны.
Качество экранов сопостовимое (с учетом что киндл на Pearl).

Железо
Качество именно сборки, у обоих отличное, никаких претензий, ничего не скрипит, никаких щелей. Но внешний вид у Sony круче. Железный корпус выглядит "богаче" чем пластмассовый киндл. Правда у металла есть недостаток, зимой когда приходишь с улицы пальцы мерзнут некоторое время, пока корпус не прогреется.

Софт
Здесь сложно сказать кто победитель. У Sony софт менее функциональный, четко заточен только под чтение. Но продуман гораздо лучше, все что сделано, сделано очень удобно и интуитивно понятно. С сонькой я полностью, действительно полностью, освоился за час-два. А у киндла есть вещи которыми я не пользуюсь, и не потому что не нужно, а сделано не удобно - оказывается проще запомнить номер страницы чем через меню открывать закладки. Или другой премер, кнопка "Back", в сони она работает тупо: возвращает на предыдущую просмотренную страницу в этой книге. В киндл решили мыслить глобально: открытие книги это тоже действие и "Back" должна это обрабатывать. Да еще, похоже, багов наделали. В результате невозможно сказать что произойдет, если нажмешь на кнопку, или вернешься на несколько страниц, или вывалишься в меню.
Но с другой стороны, иметь сеть очень, нет ОЧЕНЬ удобно. Я киндл к компу не подключаю, закачиваю книги прямо с сайта, или через WI-Fi или через 3G. Кстати, мобильный интернет халявный, медленный, но для книжек хватает. У Амазона вроде договоренность с кучей операторов, поэтому работает везде, ездил в отпуск в Крым, без проблем. Ничего настраивать не надо, просто хватает сеть и работает.

Форматы
Длинные списки форматов у некоторых производителей, все это фигня. Вам нужен всего один формат, в котором легко скачать или в который легко с конвертировать.

Sony понимает EPUB, но криво, есть проблемы с нумерацией страниц, листаешь, листаешь страниц 5, а номер не меняется, а на следующий номер может прийтись всего одно перелистывание а может 10. Логика не понятна.
Остается LRF (сонивский закрытый формат). Для винды есть обалденная программа "Однокнопочный FB2 в LRF конвертер" - http://www.msh-tools.com/ebook/fb2lrf.html, обсуждение на форуме - http://www.the-ebook.org/forum/viewtopic.p...asc&start=0
Для линуха - calibre http://calibre-ebook.com не такая удобная.


С Kindle все проще он понимает MOBI, тоже проприетарный, но книжки в нем можно скачать с флибусты напрямую. Причем прямо с киндла, заходишь с него на http://kindle.dubdubom.com, пишешь что надо, тебя перебрасывает на флибусту, а там ссылка на mobi файл. Через некоторое время, появляется окошко "Книга бла-бла установлена можно читать".

И напоследок про PDF. Формально все книжки его понимают, отображают правильно, русский показывают. Но обычно в PDF сканы книг крупного формата (что-то среднее между A5 и A4) и на экране читалки это жутко мелко. При желании увидеть можно, но книгу прочитать уже не реально. Поэтому на тех литературу не рассчитывай, или бери 10 дюймовую книжку.

wiz29,
24.2.2012, 11:13 QT интерфейс, ООП
Цитата(Гость_=DENIS=_* @ 22.2.2012, 23:51) *
Как правильно свзяать сигнал кнопки с внешним слотом (находится в основном классе Manger). Сделать механизм, подобный интерфейса, или сдалеать в WaitDialog функцию, в которую буду передавать SLOT(mySlot())???

Я бы сделал что-то вроде

Если не надо обрабатывать клик в WaitDialog.
//waitdialog.h
class WaitDialog: public QDialog
{
...

signals:
   void closeBtnClicked();
}

//waitdialog.cpp

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    ...
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton, SIGNAL(clicked()), this, SIGNAL(closeBtnClicked()));
}



Если WaitDialog должен что-то делать перед или после клика.
//waitdialog.h
class WaitDialog: public QDialog
{
...

private slots:
   void closeBtnClickedSlot();

signals:
   void closeBtnClicked();
}

//waitdialog.cpp

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    ...
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton, SIGNAL(clicked()), this, SLOT(closeBtnClickedSlot()));
}

void WaitDialog::closeBtnClickedSlot()
{
   ...
   emit closeBtnClicked();
   ...
}


=DENIS=,
13.2.2012, 12:05 исходники QComboBox
Цитата(Алексей1153 @ 13.2.2012, 7:16) *
ок, дома посмотрю.

ps что за глюк с репой )))

Я брал отсюда https://qt.gitorious.org/qt/qt Если нет возможности/желания использовать git, то там можно скачать в виде архива.
Алексей1153,
6.2.2012, 11:37 Русификация стандартных окон
Цитата(good_game @ 6.2.2012, 11:12) *
В разработанной программе используются стандартные диалоговые окна QFontDialog, QPrintDialog и тому подобные.
Подскажите, как их русифицировать? В них все подписи английские.
Тот же вопрос относится и к контекстному меню элементов работы с текстом: чтобы было не "Cut/Copy/Paste", а "Вырезать/Скопировать/Вставить". Можно, конечно, создавать своё меню из QAcion и прикреплять к виджету, но хотелось бы использовать уже готовые классы, а не изобретать велосипед.

Мы используем такой код:
QString locale = QLocale::system().name();

QTranslator *qtTranslator = new QTranslator(qApp);
qtTranslator->load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
qApp->installTranslator(qtTranslator);

QTranslator *appTranslator = new QTranslator(qApp);
appTranslator->load(QString("${TRANSLATIONS_DIR}/${PROJECT_NAME}_%1.qm").arg(locale));
qApp->installTranslator(appTranslator);
good_game,
8.12.2011, 20:39 Удаление скобок
Цитата(RazrFalcon @ 8.12.2011, 20:50) *
ППЦ... Пашет! Как?!

Большое спасибо.
И можно ли расшифровку увидеть. А то что-то не совсем понял работу его.

Да регэкспы это жесть :)
Для читаемости двойные слеши я уберу, это чисто сишная фишка.

Здесь засада с жадностью выражений. По умолчанию квантификаторы жадные, и они будут хватать самую первую и последнюю скобки. Т.е. в "текст[123]text[567][890]" выражение "\[.*\]" хапнет все от первой до последней скобок - "тект[123]text[567][890]". Это можно изменить используя QRegExp::setMinimal, но не в нашем случае. Нам нужны и не жадные квадратные скобки, и жаднючие "\s*". Поэтому приходится извращаться.

Я буду идти от краев к центру.
\s*\[[^\[]*\]\s*
\s* - 0 или более пробельных символов перед и после патерна.

\[[^\[]*\]
\[ и \] - Квадратные скобки именно как символы, в отличие от следующего пункта. Если перед символом стоит слеш, мы говорим, что это обычный символ а не спецсимвол.

[^\[]*
* - 0 или более повторений предыдущего шаблона.

[^\[]
[ и ] - Без слешей означают перечисление символов. Например [АБВ] - один символ или А, или Б, или В.

^\[ - Скобка "\[", но перед ней стоит отрицание "^". Т.е. любой символ кроме квадратной скобки.

Что получилось в итоге:
Ищем последовательность начинающуюся и заканчивающуюся скобками, но внутри последовательности открывающей скобки быть не должно. Перед и после нее могут быть пробелы.

P.S. А как этот регэксп смотрится с BB-кодами, вообще сказка:)
RazrFalcon,
8.12.2011, 18:26 Удаление скобок
Цитата(RazrFalcon @ 8.12.2011, 19:12) *
Вот как сейчас работает. И работает как надо. Но это мой вариант решения. Может есть проще.
В скобках может быть что угодно, вообще без ограничений. Что я и реализовал.

Я верю что он работает, но уж больно он длинный.
Попробуй
    QString s;
    QRegExp re = QRegExp("\\s*\\[[^\\[]*\\]\\s*");

    s="[тект][1234]text[1234][1234]";
    qDebug() << s.remove(re);

    s="[Some ELSE 1234] [1234] text [1 2 3 4] [1234]";
    qDebug() << s.remove(re);

    s="[1.;& Text][1234] text [1234][1234]";
    qDebug() << s.remove(re);[1234]";

RazrFalcon,
5.12.2011, 16:02 QRegExp длина выражения
Цитата(xu-user @ 5.12.2011, 15:18) *
в результате получаю что правильным оказывается любое число до 11-ти знаков включительно.

Похоже Вы накосячили где-то в другом месте, с условием проверки. Должно быть с точностью до наоборот.
"\\d{11}" - соответствует любой строке в которой есть последовательность из 11-ти чисел. Соответственно строка должна быть длинее 11-ти символов.
Чтоб проверять совпадение шаблона со всей строкой, добавьте условия начала и конца строки - "^\\d{11}$". Или посмотрите на QRegExp::exactMatch.

    s = "Test 1234567890END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    s = "Test 12345678901END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    s = "Test 123456789012END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    // ------------------

    s = "1234567890";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "12345678901";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "123456789012";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "Test 12345678901END";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));


"Test 1234567890END" false 
"Test 12345678901END" true
"Test 123456789012END" true
"1234567890" false
"12345678901" true
"123456789012" false
"Test 12345678901END" false
xu-user,
30.11.2011, 18:09 Открытие файла не из ресурсов в QSS
Цитата(ruzik @ 30.11.2011, 18:05) *
Цитата
background-image:url(images/transp.png);
и открывает изображение которое находится в папке images рядом с qss файлом

Нет, файлы ищутся не относительно qss а относительно текущего каталога. То что возвращается QDir::current. IMHO это глупость. У себя мы сделали препроцессинг файла
QString RazorThemePrivate::loadQss(const QString& qssFile) const
{
    QFile f(qssFile);
    if (! f.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qWarning() << "Theme: Canot open file for reading:" << qssFile;
        return "";
    }

    QString qss = f.readAll();
    f.close();

    if (qss.isEmpty())
        return "";

    // handle relative paths
    QString qssDir = QFileInfo(qssFile).canonicalPath();
    qss.replace(QRegExp("url.[ \\t\\s]*", Qt::CaseInsensitive, QRegExp::RegExp2), "url(" + qssDir + "/");

    return qss;
}

ruzik,
29.11.2011, 12:27 Мультимедиа клавиши
Цитата(urandom @ 26.11.2011, 12:08) *
огромное спасибо, а можно пример подобной ловушки?

По рукам ходят 2 версии глобальных хоткеев на Qt. Первая - кусок libqxt, вторая ЕМНИП выдрана из PSi.
Вот PSi-хованная версия
Использовать очень просто:
#include "globalshortcutmanager.h"
...
    GlobalShortcutManager::instance()->connect(QKeySequence("Alt+F2"), this, SLOT(showHide()));



urandom,
29.11.2011, 12:05 Программа для создания кроссвордов
Цитата(xwicked @ 8.11.2011, 2:39) *
Появилась возможность печати кроссворда. Хочу обратить особое внимание на тестирование этой функции, так как у меня дома нету принтера.

Для отладки печати под виндой можно использовать программу fineprint. Триальная версия добавляет строку внизу страницы, но для тестов это не существенно.
В линухе можно настроить виртуальный принтер печатающий в PostScript файл.
xwicked,
21.11.2011, 15:03 Иконки в приложении и QIcon::fromTheme()
Цитата(RazrFalcon @ 17.11.2011, 10:33) *
Имеем:
actionConfig->setIcon(QIcon::fromTheme("configure", QIcon(":/configure.svgz"))); // из доков
Вроде все верно. Если я на лине - то будет грузится первая иконка, если на винде - 2-я.
Но у меня в консоль сыпятся ошибки если я использую следующее:
win32:RESOURCES   += icons/icons.qrc
Cannot open file ':/configure.svgz', because: Unknown error
То есть он не может найти иконки которые я пихаю в ресурсы. Но мне то не нужны они в ресурсах на линуксе. Как только убираю win32 - сразу все работает.
Как решить? делать ifdef для иконок как то не хочется...


Как я понял ошибки сыпятся в линухе. Так и правильно. Вначале подготавливаются все аргуметны функции, т.е. создается QString("configure") и QIcon(":/configure.svgz"), а потом они передаются в QIcon::fromTheme.
Перепиши как
QIcon icon = QIcon::fromTheme("configure");
if (icon.isNull())
    icon = QIcon(":/configure.svgz")
actionConfig->setIcon(icon);

Или храни запасную иконку для обеих систем, к сожалению, в линухе нельзя быть уверенным что найдется иконка из темы. Например, если запустить программу не в Гноме и не в КДЕ, QIcon::IconTheme возвращает пустое имя, и иконки не находятся.
RazrFalcon,
21.11.2011, 14:34 Как добиться подобного внешнего вида?
Цитата(Флинт @ 21.11.2011, 11:47) *
Цитата(wiz29 @ 11.11.2011, 17:33) *
попробуй использовать QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const


Добавляет три точки, где текст обрывается, не знаю чем это может помочь 8)

Пробывал через QFontMetrics узнавать высоту каждой строчки, но не понял как вычислить высоту абзаца.

Надо установить свойство uniformRowHeights в false. Перекрыть SizeHint.
Для получения размера текста можешь использовать параметр boundingRect в QPainter::drawText.
Флинт,

2 страниц V   1 2 >
RSS Текстовая версия Сейчас: 19.1.2018, 20:00