[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.31597 Reply
File: 100px-Qt-logo.png
Png, 8.33 KB, 100×113 - Click the image to expand
edit Find source with google Find source with iqdb
100px-Qt-logo.png
Тред для обсуждения фреймворка Qt и IDE QtCreator. Я вот думаю, Qt такая же тормозная фигня, как и Java/.net/Mono и нивелирует достоинства С++ по сравнению с С# и Java или так всё не так значительно? Стоит ли применять концепцию сигналов и слотов где-попало или она тормозная? Шлее пишет не делать виртуальные слоты, хотя утверждает, что это куда как больше подходит для ООП, как-то это странно. Что лучше Tulip или STL? И foreach в Qt совсем уж странный. Для чего он вообще? Для чего стоит использовать Qt? Кроме гуя, стоит ли его использовать лоя графики, sql и tcp/udp и т.п.?
>> No.31598 Reply
>>31597
В очередной раз напоминаю, что принято подбирать средства для решения задач, а не задачи для решения средствами. Следовательно, все твои вопросы совершенно безблагодатны.
>> No.31599 Reply
>>31597
> Qt такая же тормозная фигня, как и Java/.net/Mono и нивелирует достоинства С++ по сравнению с С# и Java
Nope. Сисярп мелкософтовский и виндолочный (Mono - не смешно), Java медленнее по умолчанию. В конце концов, результат-то получается чисто плюсовый. Помнится, попадалась где-то статья с сравнением Qt и Java, называлась, как ни странно, comparison between Qt and Java, рекомендуется к прочтению. Она уже не совсем свежа, но все равно полезна.
>> No.31600 Reply
>>31598
Скажем, если я буду делать текстовый процессор, казуальную он-лайн-игру, чат-клиент или просмотрщик изображений, какое-либо домашнее настольное ПО, от которого хочется быстродействия, чтобы быстро работало. А приложений на смартфонах типа андроид/симбиан/iOS для, скажем, просмотрщика djvu? Можно ли использовать QtSql для, скажем, веб-сервера?
>> No.31601 Reply
>>31600
> Можно ли использовать QtSql для, скажем, веб-сервера
Вебсерверу (если речь не идет об уберхайлоадах типа гугла) вообще пофиг на чем ты пишешь, там кэширование съедает все проблемы со скоростью
>> No.31603 Reply
>>31601
Я имел в виду писать сам сервер, а не сайты.
>> No.31607 Reply
>>31600
> от которого хочется быстродействия, чтобы быстро работало
Погугли "Pitfalls of Object Oriented Programming" (Tony Albrecht).
>> No.31609 Reply
>>31600
> если я буду делать текстовый процессор
не будешь, они уже все сделаны.
> казуальную он-лайн-игру
php, python или ruby
> чат-клиент
их и так миллион
в любом случае там похуй на производительность, так что лучше выбрать что-нибудь со сборкой мусора и возможностью подключения сишных либ.
> просмотрщик изображений,
если только это не просмотрщик каких-нибудь ультра-хайрезных картинок по 10 гигабайт то похуй на чём (см. предыдущий пункт), иначе - на сишечке (без плюсов, естественно).
> домашнее настольное ПО, от которого хочется быстродействия
никакое домашнее по не будет требовать охуительных вычислительных ресурсов, так что снова похуй
> А приложений на смартфонах типа андроид
java
> симбиан
нинужен
> iOS
objective-c
> можно ли использовать QtSql для, скажем, веб-сервера?
можно даже javascript использовать
>> No.31611 Reply
>>31609
> не будешь, они уже все сделаны.
Я придумывал варианты, пытаясь представить, какие бывают приложения, я не собираюсь их делать.
> никакое домашнее по не будет требовать охуительных вычислительных ресурсов, так что снова похуй
Никакое не будет, но у меня всё тормозит, блядь, да ну тебя.
>> No.31612 Reply
>>31609
> java
В чём логика применения на самом слабом устройстве самой жрущей технологии? В том, что полезные и полнофункциональные приложения на них "нинужны"?
>> No.31613 Reply
>>31612
спроси у гугла. кстати, там есть jni и можно даже кинцо смотреть в hd (с такими-то либами на няшной)
>> No.31648 Reply
А стоит ли использовать Q_OBJECT для своих классов, чтобы использовать сигналы/слоты, свойства, объектные иерархии?
>> No.31652 Reply
>>31611
Купи компьютер вместо калькулятора же.
>> No.31654 Reply
>>31612
> В чём логика применения на самом слабом устройстве самой жрущей технологии?
Вероятно, в том, что процессоры "самых слабых устройств" поголовно умеют аппаратно выполнять байткод Java. google://Jazelle
>> No.31676 Reply
>>31654
А, больше вопросов не имею.
>> No.31677 Reply
>>31654
А дальвик нахуя тогда нужен?
>> No.31679 Reply
>>31648
Да
>> No.31680 Reply
Шлее про Qt4.5
> Метод children о возвращает константный указатель на список объектов-
потомков. Для приведенного ранее примера (листинг 2.12, рис. 2.2), метод
В хелпе к Qt 5.0.2:
> const QObjectList & QObject::children () const
Чё это такое? Почему там и там по-разному?
>> No.31681 Reply
>>31677
enwiki://Jazelle
> Jazelle DBX (Direct Bytecode eXecution) allows some ARM processors...
enwiki://Android_(operating_system)
> Supported platforms: ARM, MIPS, x86, I.MX
>> No.31682 Reply
>>31680
> const QObjectList
возвращает константу
> () const
не меняет состояник класса
>> No.31684 Reply
>>31682
Я имел в виду, почему у Шлее - указатель, а в хелпе и в действительности - ссылка?
>> No.31690 Reply
>>31684
ты этого Шлее на языке оригинала читаешь?
>> No.31693 Reply
>>31684
Версии разные. Книжка устарела давно.
>> No.31709 Reply
>>31690
Лол, он русский.
>>31693
Я правда хотел найти книгу по Qt5, их ещё не написали вообще. Говорят, можно вроде выучить Qt4 и доучить добавки Qt5 по документации. Там отдельная страница добавок.
>> No.31720 Reply
Я сейчас задам идиотский вопрос, но я щас лопну. Почему QtCreator не перекомпилирует проект даже при нажатии на молоточек при изменении кода хедеров? Жму на молоток, а он берёт и проскакивает компиляцию.
>> No.31724 Reply
>>31709
> Лол, он русский.
тогда понятно
>> No.31809 Reply
File: 11.jpg
Jpg, 276.09 KB, 1366×768
edit Find source with google Find source with iqdb
11.jpg
File: 333.jpg
Jpg, 140.35 KB, 1006×702
edit Find source with google Find source with iqdb
333.jpg
File: Untitled-1.jpg
Jpg, 162.77 KB, 1047×723
edit Find source with google Find source with iqdb
Untitled-1.jpg

Как нормально настроить этот ваш кюти билдер?
Установил minGw со всеми приблудами, прописал его в Path.
А в итоге такая вот ерунда пикрилейтед
>> No.31811 Reply
>>31809
У тебя среда частично настроена на использование компилятора из Microsoft Visual Studio, а другая часть — на использование MinGW. Ты уж определись, либо создай два соответствующих профиля сборки.
Ты, возможно, скачал
> Qt 5.0.2 for Windows 32-bit (VS 2010, 485 MB)
вместо
> Qt 5.0.2 for Windows 32-bit (MinGW 4.7, 650 MB)
что и добавило тебе эти проблемы, похоже.
>> No.31813 Reply
>>31811
Хм. Спасибо, попробую.

А что на счет отлаживания С/С++ там? Слышал, что выбивает с ошибками часто.
да, да, я не знаю еще зачем оно мне вообще. Мне просто надо научиться С/С++ и я выбираю ide, выбор пал на сие творение, ткк понравились некоторые фичи, которые, возможно, в будущем я стану использовать в уже привычной мне среде. Я что-то делаю не так? Чувствую, что да.
>> No.31816 Reply
>>31813
Лично я, когда изучаю новый язык, обхожусь вообще без IDE - все делаю в соснольке и Sublime Text 2. А потом уже, когда освоюсь с ним, ищу IDE, просто чтобы печатать быстрее. А иногда продолжаю и без нее.
>> No.31817 Reply
>>31816
Да я тоже так думал, но нужен дебагер, я же и так в трех строчках запутаюсь

Прикрутил Визуал студию к нему, но теперь при компиляции выдает такое вот:
"
Запускается D:\qtProj\untitled3\debug\untitled3...
Не удалось выполнить «»: Не удается найти указанный файл.

D:\qtProj\untitled3\debug\untitled3 завершился с кодом -1"
>> No.31818 Reply
File: 1352137611700.gif
Gif, 1689.56 KB, 200×150 - Click the image to expand
edit Find source with google Find source with iqdb
1352137611700.gif
>>31813
> С/С++
> /
А бейсик/кобол не хочешь выучить?
>> No.31819 Reply
>>31818
Правильно, все поцоны учат ruby, ruby - мейнстрим.
>> No.31824 Reply
>>31817
Используешь print-ы и систему типов (если она есть). Дебаггеры часто прикручивать слишком муторно, и они не всегда есть.
>> No.31826 Reply
>>31816
Скажи это виндоюзерам. На линуксах-то это идеальный вариант.
>> No.31827 Reply
>>31818
Можно ли знать С++, не зная Си? Я вот на хабре в статье видел вопрос в списке популярных вопросов на собеседованиях для С++-кодеров про malloc. Нужны ли С++-кодеру malloc, обычные С-массивы, С-строки, printf/scanf, С-стайл преобразования типов? Если да, то такая дробная запись выглядит логично.
>> No.31828 Reply
>>31827
> Можно ли знать С++, не зная Си?
Это разные языки. Если в резюме пречисляешь, например, 4 языка, то они идут через запятую, так почему между этими двумя нужно ставить вместо неё дробь?
>> No.31829 Reply
>>31826
Виндоюзеры - не разработчики.
>> No.31830 Reply
>>31826
есть же virtualbox, vmware, kvm, ssh в конце концов
>> No.31831 Reply
>>31828
Ты на поставленный вопрос не ответил!
>> No.31833 Reply
Согласно Скотту Майерсу, C++ состоит из четырёх "языков":
   язык C, с которым частично сохранена обратная совместимость;
   ООП-часть C++;
   шаблоны;
   STL.
>> No.31835 Reply
>>31829
О госпаде, как же вы надоели. Да, не разработчики, но тут вообще-то хотят научиться, смекаешь? Отравляйся в свою секту.
>> No.31838 Reply
>>31835
Вот я и учу: "Сначала поставьте себе среду разработчика..."
Серьезно, я в свое время очень долго ебался со всякими IDE: Delphi, C++ Builder, MS VS, NetBeans, Eclipse, искал для них плагины - пока мне не показали Linux. С тех пор компилю и тестю только из сосноли (Alt+Tab - вверх - Enter), а все эти ваши IDE использую только в качестве продвинутых текстовых редакторов (например, если пишешь на Яве, то без Eclipse не обойтись - уж больно она бойлерплейтнутая). Системы сборки в них считаю переинжениренным говном.
>> No.31839 Reply
>>31838
А чем в консоли легче, чем в ИДЕ нажать кнопочку плей?
Я вот ищу для того, чтоб нормально дебажить и формочки рисовать.
>> No.31840 Reply
>>31838
> я в свое время очень долго ебался
А надо было изучать.
> а все эти ваши IDE использую только в качестве продвинутых текстовых редакторов
Ну молодец, чо. Но твоё невежество - это ни разу не хорошо.
>> No.31842 Reply
>>31813
> А что на счет отлаживания С/С++ там?
gdb, valgrind, gprof, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html, множество прочих отладчиков
> Слышал, что выбивает с ошибками часто.
Частота зависит от кривизны рук и неопытности разработчика.
мимокрокодил
>> No.31845 Reply
>>31838
Но ведь такой подход годен только лабораторки универские делать. Сириусли, плохо представляю себе продуктивную разработку без адекватного интеллисенса, тайп-чекера, инлайн исполнения кода в дебаге, менеджера зависмостей, автоматизации сборки, автоматического тестирования, интеграции с контролем версий, и иногда с системой управления проектами. Наверняка еще что-то забыл. А на визуализацию студией дерева вызовов в процессе отладки и визуализацию зависимости я вообще фапаю.
>> No.31846 Reply
>>31845
Зачем тебе это всё? Чем ты занимаешься?
>> No.31847 Reply
>>31846
(Пишу новое ПО|допиливаю фишки в ПО) используемое в айтишной инфраструктуре предприятия. Тащем-то тоже самое делает любой программист, не?
Алсо для удовлетворения своего любопытства пописываю простенький AI дома вечерами, пока всего несколько тыщ строк кода в девяти проектах, но без поддержи IDE я херово представляю как во всем этом разбираться, не говоря уже о том, что еще примерно столько же кода среда сгенерировала за меня, избавив от БЕЗДНЫ АНАЛЬНОЙ БОЛИ.
>> No.31848 Reply
>> No.31849 Reply
Мне кажется это сродни альпинизму. Кому-то доставляет лезть в гору, но если тебе нужно просто подняться наверх - ты воспользуешься фуникулёром.
>> No.31876 Reply
>>31849
Тред позиционировался как серьёзной промышленной направленности. Однако я симатизирую качественному, но эффективному производству ПО, а не просто эффективному и дешёвому. То есть цениваем только результат и эффективность его получения.
>> No.31878 Reply
>>31876
> серьёзной промышленной направленности
Быстро получить решение бизнес-задачи приемлемого качества. Если решение для своей организации, то иногда еще оглядываются на конечную стоимость обладания, если на продажу, то тоже, но тут стоит задача максимизации :3
>> No.31880 Reply
>>31839
Настройкой. Чтобы заставить произвольную IDE билдить что-то сложнее лабораторки, нужно стереть мышку в хлам. Или это вообще невозможно сделать, например, настроить удалённую компиляцию. В крайнем случае я настраиваю отдельную кнопку на запуск внешней команды-билдера (например, "make").
>>31840
> А надо было изучать.
И как я раньше без автомобиля жил? А теперь все успеваю: и на заправку съездить, и масло поменять...
>>31845
> Сириусли, плохо представляю себе продуктивную разработку без адекватного интеллисенса, тайп-чекера
Я тоже, поэтому код пишу в продвинутых IDE. Но все остальное в них - уровня лабораторок и даже ниже.
>> No.31881 Reply
>>31880
> Но все остальное в них - уровня лабораторок и даже ниже.
Ну хз, у меня vs2012 + облачный tfs отлично зашли, и настроил минут за 15 контроль версий, катящийся билд, автоматическое тестирование и управление проектом. Потом ничего запускать не нужно, заливаешь код и все.
>> No.31883 Reply
>>31881
> контроль версий
Сколько кликов стоит коммит?
> катящийся билд, автоматическое тестирование
На удалённой машине?
> заливаешь код
По FTP?
>> No.31905 Reply
>>31883
> Сколько кликов стоит коммит?
У меня два + написать коммент + еще один. Можно сократить до двух, но я не так часто коммичу, чтобы вытаскивать действие на квикбар.
> На удалённой машине?
Да, в мелкомягком облаке.
> По FTP?
Код автоматически уходит в облако при коммите, я понятия не имею по какому протоколу.
>> No.31911 Reply
>>31905
> в мелкомягком облаке
Надеюсь, это какое-то внутрикорпоративное облако?
> в мелкомягком облаке
А если это мейнфрейм? На него тоже мелкомягкое облако ставить?
> в мелкомягком облаке
Не завидуя я вашим админам...
> У меня два
Дальше не читал. Ctrl+T, вызывающая команду "sc 'empty message'", где sc - это мой алиас для коммита в SVN.
>> No.31922 Reply
File: ikno-wait-fuckthis.jpg
Jpg, 53.26 KB, 300×562 - Click the image to expand
edit Find source with google Find source with iqdb
ikno-wait-fuckthis.jpg
>>31911
Нет, "публичное" облако. то админов нужно только чтобы у меня был инет. Я теряю 4 секунды драгоценного времени. Окей.
>> No.31925 Reply
>>31911
> SVN
ffuuu.jpg
>> No.31926 Reply
>>31925
С Git-ом было бы слишком просто.
>> No.34724 Reply
Фак йес я тебя нашел, qt-тред!
Анон, поясни мне за сигналы и слоты в классах. Вот например у меня есть класс
#include <QObject>
#include <QtSQL/qsql.h>
#include <qstring.h>
#include "mainwindow.h"

class sservice : public QObject
{
    Q_OBJECT
public:
    explicit sservice(QObject *parent = 0);
signals:
    void Error(QString text);   // Сообщение об ошибке

public slots:
    void SamSetSrv(QString NewSrv);
    
private:
    QString CurrSRV;    // Текущий сервер
    int CurrPort;       // Текущий порт
    QString CurrDB;     // Текущая БД
    QString CurrUSR;    // Текущий юзор
    QString CurrPWD;    // Текущий пароль
    int m_value;
};

#endif // SSERVICE_H
Как видно у него есть слот SamSetSrv(QString NewSrv) и сигнал Error(QString).
Вот например реализация слота:
#include "sservice.h"

sservice::sservice(QObject *parent) :
    QObject(parent)
{
}

void sservice::SamSetSrv(QString NewSrv) {  
    CurrSRV=NewSrv;
    emit Error(CurrSRV);

}
Далее я создаю форму с двумя полями lineEdit и соединяю слоты с сигналами:
QObject::connect(ui->lineEdit, SIGNAL(textChanged(QString)), &sserv, SLOT(SamSetSrv(QString)));
QObject::connect(&sserv, SIGNAL(Error(QString)), ui->lineEdit_2, SLOT(hide()));
Но при вводе в lineEdit LineEdit_2 не получает сигнала, который должен испустить SamSetSrv. Причем если напрямую соединить lineEditы через слоты-сигналы, то всё работает. Вопрос - ЧЯДНТ в объявлениях класса? И вообще что я doing wrong?
>> No.34725 Reply
>>34724
Возможно, дело в том, что у сигнала есть параметр, а у слота нет. Попробуй сконнектить заранее Error(QString) с каким-нибудь сигналом voidError(), а затем коннекть voidError() и hide().
Кстати, для неперегруженных сигналов/слотов новый синтаксис коннекта удобнее.
>> No.34726 Reply
>>34725
> Возможно, дело в том, что у сигнала есть параметр, а у слота нет.
Я пробовал сделать так:
QObject::connect(ui->lineEdit, SIGNAL(textChanged(QString)), &sserv, SLOT(SamSetSrv(QString)));
QObject::connect(&sserv, SIGNAL(Error(QString)), ui->statusBar, SLOT(showMessage(QString)));
Но результат тот же. У меня вообще два предположения - либо не происходит вызов сигнала (почему?), либо не передаются параметры (тоже не понятно почему).
>> No.34731 Reply
>>34724
Допиши public в месте объявления сигнала.
public signals:
>> No.34737 Reply
>>34731
Пробовал, пишет что expected ':' got 'signals'
>> No.34747 Reply
>>34724
Сообщения сборки или вывод программы какие-нибудь предупреждения выдают? Не пишет, что unable to connect signal to slot?
Может остальной код выложишь? Хотя бы полностью тот метод, где connect вызываешь.
>> No.34748 Reply
>>34724
поставь qDebug() << NewSrv; в sservice::SamSetSrv (инклюдить нужно QDebug)
и что такое переменная sserv?

>>34725
> Возможно, дело в том, что у сигнала есть параметр, а у слота нет.
нет, это должно работать. можно в сигнале игнорировать последние аргументы слота.
алсо, при проблемах соединений слот-сигнал, qt должен срать в консоль
>> No.34753 Reply
Как возможный вариант (полного кода так и нет): sserv не объявлен членом класса MainWindow или где ты там инициализируешь все это.
>> No.34794 Reply
>>34747
> Сообщения сборки или вывод программы какие-нибудь предупреждения выдают?
Неа.
> Может остальной код выложишь? Хотя бы полностью тот метод, где connect вызываешь.
Там и кода-то особо и нет создал проект@добавил класс. Вот тут я вызываю connect (это mainwindow.cpp):
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "sservice.h"
#include <QDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    sservice sserv;
    
    ui->setupUi(this);

    QObject::connect(ui->lineEdit, SIGNAL(textChanged(QString)), &sserv, SLOT(SamSetSrv(QString)));
    QObject::connect(&sserv, SIGNAL(Success(QString)), ui->statusBar, SLOT(showMessage(QString)));
}

MainWindow::~MainWindow()
{
    delete ui;
}
>>34748
> и что такое переменная sserv?
Это созданный экземпляр класса, если я всё правильно понимаю.
>> No.34805 Reply
>>34794
> sservice sserv;
Либо динамически создай, либо сделай атрибутом класса MainWindow.
>> No.34819 Reply
File: 343434.png
Png, 21.49 KB, 416×338 - Click the image to expand
edit Find source with google Find source with iqdb
343434.png
>>34805
Спасибо тебе добрый человек. Я ведь правильно понял - sserv теперь атрибут класса MainWindow?
class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private slots:


private:
    Ui::MainWindow *ui;
    sservice sserv;

};
Алсо заработало.
>> No.34820 Reply
>>34819
Теперь да, атрибут (может называться также "поле", "член").
>> No.34828 Reply
Небольшой вопрос: как передавать параметры для создаваемого класса?
Вот например я сделал так:
class sservice : public QObject
{
    Q_OBJECT
public:
    explicit sservice(int engine = EN_MYSQL, uchar mask = 0x00);

//=======разные другие объявления===========
    int CurrEngine;     // Текущий движок БД
    uchar Mask;         // Если всё верно, то маска будет 00011111 = 0x1F
}
В конструкторе (это же конструктор?) я нарисовал это
sservice::sservice(int engine, uchar mask) 
    
{   
    sservice::CurrEngine=engine;
    sservice::Mask=mask;
}
Но если сделать sservice атрибутом класса MainWindow, как можно передать другие начальные значения? При написании скобочек и передаче параметров как в функцию компилятор ругается. Или нет пути и нужен другой способ создания класса?
>> No.34829 Reply
>>34828
Хотя я кажется понял.
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    ui->setupUi(this);
    sservice *samServ = new sservice(EN_MYSQL);

    QObject::connect(ui->samSrv, SIGNAL(textChanged(QString)), samServ, SLOT(setSrv(QString)));
}
>> No.34852 Reply
>>34828
> как можно передать другие начальные значения?
Описать собственный конструктор класса по умолчанию?

Хотя ты не очень понятно для меня описал, что бы ты хотел сделать.
>> No.34853 Reply
>>34852
Попробую объяснить. В общем я создал класс, который будет отвечать за соединение с sql сервером. БД может быть MySQL ил MSSQL (в одном приложении нужно будет обращаться к обоим), поэтому я решил что при создании класса сразу же было бы неплохо передавать ему параметры, какая БД используется для этого экземпляра класса (ну, чтоб не делать ещё один метод вроде setDbEngine(int engine)).
>> No.34854 Reply
>>34828
> При написании скобочек и передаче параметров как в функцию компилятор ругается.
Потому что sserv здесь >>34819 объявлен статически, и его значение должно быть известно на этапе компиляции (это из-за того, что для экземпляров QObject запрещены конструктор копии и оператор присваивания, смотри документацию по QObject). Ты можешь его инициализировать только в списке инициализации конструктора (та штука, которая идёт после двоеточия здесь MainWindow::MainWindow(QWidget *parent) : ... ).
Если тебе часто придётся менять движок, то можешь
> делать ещё один метод вроде setDbEngine(int engine)
Можешь сделать по-другому. Создавать динамически, как ты делаешь здесь >>34829
Но в твоём коде ты не сможешь потом обратиться к samServ, потому что область видимости этой переменной ограничена конструктором.
Сделай лучше атрибутом указатель на sservice.
private:
  sservice *samServ;
И потом создавай динамически с помощью samServ = new sservice(EN_MYSQL);
>> No.34858 Reply
>>34854
Спасибо за пояснение, теперь мне стало ещё немного понятнее.
> private:
> sservice *samServ;
> samServ = new sservice(EN_MYSQL);
Так и сделал.
Алсо то, что в стандартную поставку QtSDK под винду не поставляются плагины к mysql меня немного опечалило. Потратил полдня, но таки мне удалось их собрать. Основной затык был в том, что в папке QtSDK\QtSource не было нужных либ (может они должны собираться при полной сборке?) и не было компилятора (почему-то во время компиляции оно захотело (в выводе был абсолютный путь) чтобы moc располагался в той директории с исходниками, хотя он есть в QtSDK\Desktop\Qt\4.7.4\mingw\bin), хотя mingw32-make отработал нормально, например (а он находится там же, где и moc - QtSDK\Desktop\Qt\4.7.4\mingw\bin). Короче местами для меня это на грани понимания.
>> No.34864 Reply
>>34858
> в стандартную поставку QtSDK под винду не поставляются плагины к mysql
Странно, не могу проверить, так как не на винде.
Ты пользуешься QtAssistant или онлайн документацией? Там есть страничка Deployment (или Deploying) on <...> (Windows, Linux или что там у тебя). И страничку про SQL какую-нибудь тоже погляди, может там что-то есть.
>> No.34866 Reply
>>34864
> Странно, не могу проверить, так как не на винде.
Под unix-like можно до установки выбрать флаги через ./configure или make config или через чего там ещё же. Например на фряшке у меня так.
> Ты пользуешься QtAssistant или онлайн документацией?
Онлайн документацией, алсо там было про компилирование плагинов к mysql, но процесс у меня несколько отличался (пришлось ещё добавить в INCLUDEPATH пути к QtCore и QtSql. А самое главное об этом нигде было ни слова). А по накатанной плагин к odbc собрался на ура. Алсо у меня два профиля - 4.8.1 и 4.7.4, вот в 4.8.1 odbc плагин был сразу, а в 4.7.4 был вообще только sqlite.
>> No.34867 Reply
>>34866
Ах, у тебя фряшка :3
>> No.34874 Reply
>>34867
Упс, опять неверно выразился. Всё действо происходит на винде, а фряшка у меня есть как вторая система.
>> No.34986 Reply
И вот снова я со странными вопросами.
Есть такой кусочек кода:
void MainWindow::on_clrDublAttach_clicked()
{
    QSqlQuery result;
    result = samServ->query("SELECT * FROM Client WHERE Client.`id`=4104");
    if (result.lastError().number()==-1) {
        qDebug() << result.value(0).toString();
    }
}
При его выполнении программа сваливается в ошибку сегментации в момент вызова функции samServ->query.
samServ объявлен в конструкторе класса MainWindow:
sservice *samServ = new sservice(EN_MYSQL);
Функция samServ->query представляет из себя вот это:
QSqlQuery sservice::query(QString Query){
        
    QSqlQuery res(db);
    if (db.isOpen()) {
         if (!Query.isEmpty()) {
             res.exec(Query);
             if (res.lastError().number()==-1) {
                    res.next();
             } else {
                 emit error(res.lastError().text());
             }
         } else {
             emit error("Empty query!");
         }
     } else {
         emit error("DB is not opened!");
         emit connected(false);
     }
   return res;

}
Объявлена как public в sservice.h:
class sservice : public QObject
{
    Q_OBJECT
public:
    explicit sservice(int engine = EN_MYSQL, uchar mask = 0x00);
    //QObject *parent = 0,
    ~sservice();
    QSqlQuery query(QString Query);

блаблабла

}
Вот собственно вопрос: как так? Я подозреваю что дело в видимости переменной samServ и я просто вызываю функцию из несуществующего класса, вот и получается такое.
Алсо мне кажется, что я выбрал плохой способ передачи результатов запроса, было бы интересно услышать советов мудрых.
>> No.34988 Reply
>>34986
> samServ объявлен в конструкторе класса MainWindow: [1]
> sservice *samServ = new sservice(EN_MYSQL); [2]
> Я подозреваю что дело в видимости переменной samServ
Да, возможно, дело в этом.
[1] Только объявлена эта переменная-член класса в заголовочном файле, а в конструкторе, получается, ты заново ее объявляешь и инициализируешь тут же [2]. Чтобы ее "просто инициализировать", надо писать samServ = new sservice(EN_MYSSQL); в конструкторе. А если по-твоему, то как раз и получается эта самая проблема с областью видимости.
>> No.34989 Reply
>>34988
И правда, спасибо.
>> No.35013 Reply
Я снова выхожу на связь.
Был ли у кого опыт работы с dbfками? Лучше работать с ними через odbc или искать другой компонент? Алсо нужно только чтение, желательно чтоб таблица указывалась путём к файлу.
>> No.35014 Reply
>>35013
It depends. Вместо DBF-ки потом могут вставить что-то другое? Да? Нет? Нет? Ну, тогда ищи компонент. С компонентом проще работать, чем через ODBC? Да? Нет? Ну, тогда юзай ODBC. И т. д.
>> No.35058 Reply
>>34986
//глобальные переменные и присваивание и объявление на разных строках - ваще пушка
>> No.35090 Reply
>>35058
Где там глобальные переменные? Все объявлены как private у класса или объявляются на месте. А присваивание с объявлением на разных строках - привычка, вот.
>> No.35096 Reply
>>35090
> глобальные переменные
> private у класса
= глобальные внутри класса

Мимокрокодил
>> No.35124 Reply
>>35096
Как что-то плохое, особенно учитывая то, что я их значения использую в разных методах класса. Или есть другое решение кроме "не нужны"? Кстати с удовольствием бы послушал, дополнительные знания никому ещё не мешали.
>> No.35125 Reply
>>35096
Это называется инкапсуляцией.
>> No.36819 Reply
File: 4783073953_16a20acb22.jpg
Jpg, 139.70 KB, 334×500 - Click the image to expand
edit Find source with google Find source with iqdb
4783073953_16a20acb22.jpg
Как убать из QMessageBox кнопку [х] в заголовке окна? WindowFlags не работают, хотя для QWiidget все получается как надо. И как в QMessageBox отклютить ввод с клавиатуры(частично, или хотя бы полностью)? Переопределяю keyPressEvent, пишу event.ignore(), но стрелки энтер и пробел(sic!) работают.
>> No.36849 Reply
>>36819
QMessageBox от QDialog наследуется, у которого по умолчанию WindowsFlags со значением Qt::Dialog идут. Может надо как-то этот флаг сбросить (применив XOR)?
> Переопределяю keyPressEvent
Вроде верно. keyReleaseEvent может тоже обрабатывать стоит? Или может попытаться конкретные клавиши блокировать?
>> No.36863 Reply
File: cosplay-morrigan-aensland-from-darkstalkers.jpg
Jpg, 272.64 KB, 500×750 - Click the image to expand
edit Find source with google Find source with iqdb
cosplay-morrigan-aensland-from-darkstalkers.jpg
>>36849
Спасибо за ответ.
Вопрос с кнопкой решен. Нужно было в init написать flags=None, и дальше как у виджета.
keyReleaseEvent не помог, все тоже. Отдельные кнопки блокировал(все кроме стрелок и энтер), по пробел срабатывает. Если игнорить все - пробел стрелки и энтер все равно работают. Забыл уточнить что QMessageBox модальное окно, может у него с родителем один event loop на двоих?
>> No.36866 Reply
>>36863
Гляди, что еще нашел:
http://stackoverflow.com/questions/15845487/how-do-i-prevent-the-enter[...]4-8-1

Из документации к QWidget::keyPressEvent:
> If you reimplement this handler, it is very important that you call the base class implementation if you do not act upon the key.
То есть, как мне кажется, тут явное указание на то, как действовать в описанной тобой ситуации. Кажется, тебе нужно еще явно вызвать метод базового класса обязательно, QDialog::keyPressEvent()
>> No.36941 Reply
File: 1383313736478.jpg
Jpg, 116.65 KB, 1200×1805 - Click the image to expand
edit Find source with google Find source with iqdb
1383313736478.jpg
>>36866
Не помогло.
Во втором варианте блокирую все клавиши, но пробел и энтер срабатывают(стрелки все-таки блокируются).
Пока хватаю клавиатуру невидимым виджетом через grabKeyboard(), может найду вариант получше.
Пробовал даже в QApplication перепределять event и при нажатии и отпускании клавиши возвращать false(по идее должен был отключится ввод с клавиатуры для всего приложения, но отнюдь). Алсо, видел много не решенных топиков по подобным темам, видать у всех с клавиатурой проблемы.
>> No.37009 Reply
К вам можно с PyQt4 или лучше в Python-тред?
>> No.37015 Reply
>>37009
Надеюсь, ты еще не забыл сам вопрос? Надо было его сразу писать, а не спрашивать разрешения же.
>> No.37147 Reply
File: 1387645434843.jpg
Jpg, 102.42 KB, 727×1098 - Click the image to expand
edit Find source with google Find source with iqdb
1387645434843.jpg
Можно ли сделать свой диалог похожим на QDialog.getExistingDirectory, в том плане что при вызове QDialog.getExistingDirectory() возвращается не обект, а отрисовывается окно где пользователь выбирает каталог, и возвращается путь к каталогу в виде строки. Тоесть программа висит на QDialog.getExistingDirectory() пока пользователь что-то не выберет и возвращает результат выбора, мне нужно именно такое поведение. Как реализовать?
>> No.37159 Reply
>>37147
QFileDialog в режиме directory
>> No.37167 Reply
>>37159
QFileDialog подходит только для выбора каталогов, но нужно вот что: в диалоге пользователь должен ввести текст в lineEdit и при вызове MyDialog() должен вернутся текст, вместо экземпляра MyDialog. Если я неправильно понял твой ответ, можешь запостить простой пример?
>> No.37180 Reply
>>37147
наследуй
@
переопределяй
>> No.37182 Reply
>>37180
Можно простой пример?
>> No.37255 Reply
>>37159
>>37180
Решено. Нужно вызвать exec() у экземпляра QDialog, а нужные значения можно получить после того как exec() отработает.
>> No.37348 Reply
File: dhm.jpg
Jpg, 282.03 KB, 603×773 - Click the image to expand
edit Find source with google Find source with iqdb
dhm.jpg
>>31597
Как сделать так, чтобы qmake дефайнил во всех файлах #define LIBC_MINGW?
В принципе, я могу это сделать вручную, но прямее через qmake, т.к. при случае можно эту штуку легко заменить на, скажем, LIBC_BSD.
>> No.37350 Reply
>>37348
Создай файлик StdAfx.h в нем запиши дефайн и в pro добавь PRECOMPILED_HEADER = StdAfx.h.
А вообще расскажи что ты хочешь сделать и зачем это тебе нужно?
>> No.37352 Reply
>>37350
> Создай файлик StdAfx.h в нем запиши дефайн и в pro добавь PRECOMPILED_HEADER = StdAfx.h.
Попробуем-с.
> А вообще расскажи что ты хочешь сделать и зачем это тебе нужно?
libc различаются друг от друга. Я играюсь с сокетами, и в шинде нет никакого sys/sockets.h даже под mingw, заместо него там winsock2.h.
>> No.37353 Reply
>>37352
ОО qt дает возможность различать под чем ты собираешь и подключать нужные хедоры и библиотеки в зависимости от текущей системы.
например вот так
win32 {
LIBS += -lboostsystem-mgw44-mt-d-155 \
                                                                                            -lboost_thread-mgw44-mt-d-1_55 \
                            -lsetupapi \
   -lwsock32 \
   -lws2_32 \


DEFINES += WIN32WINNT=0x0501

}
смотрел кстати в сторону буста и его asio http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio.html
>> No.38506 Reply
Есть ли здесь люди, которые будут не против побеседовать о всяческих тонкостях Qt в личной переписке?
>> No.38513 Reply
>>38506
Пиши здесь! Постараюсь ответить, да и другие не откажутся.
>> No.38548 Reply
>>38513
Если бы вопрос был один и я мог его сформулировать, так бы и сделал. Я бы скорее хотел сформировать общение для обмена опытом.
>> No.40536 Reply
Более новый тред не искал.

Суть вопроса следующая. Хочу в таблицу добавить опцию "протаскивания" формул как в редакторах таблиц. Как это можно сделать? Что наследовать и переопределять?
>> No.40934 Reply
У кого-нибудь работает Qt::WindowStaysOnBottomHint под windows [spoiler]7[/spoiler]?
>> No.40935 Reply
>> No.40936 Reply
>>40934
разметка-разметочка
>> No.40937 Reply
>>40934
А ты гуглил, стековерфловил? У людей вроде работает.
>> No.40938 Reply
>>40937
гуглил, причём довольно долго. но единственное что нашел - Qt::X11BypassWindowManagerHint, который вроде как для линуксов сделан, но на всякий случай проверил - никак не влияет.
> стековерфловил
если подразумевается спрашивание этого же вопроса на оверфлове - то нет, ибо если бы мне даже там ничего не ответили, то вряд ли бы я пришёл сюда.
если есть тебе не лень и у тебя работает - скинь пожалуйста код.
>> No.40939 Reply
>>40938
если тебе не лень
быстрофикс
>> No.40940 Reply
>>40939
А самому подебажить? Внутринности у qt несложные.
мимо
>> No.40943 Reply
>>40940
что дебажить-то? сорцы qt? в creator`e есть windows flags example, в котором WindowsStaysOnBottom также не работает. в связи с чем есть подозрение что проблема в qt. если же у кого-то оно под виндой работает - проблема очевидно у меня. поэтому и пытаюсь найти кого-нибудь кто протестит у себя и скажет работает или нет.
>> No.40958 Reply
>>40943
Если не работает example, то обновись до последней версии. Если и тогда не заработает, то пиши багрепорт. Что ты как маленький?
Ну а вообще, да, дебажить соры qt. Не советую этого делать в Qt Creator, правда.
Specially for ya сегодня вечером попробую у себя этот экзампл.
>> No.40976 Reply
>>40958
> Если и тогда не заработает, то пиши багрепорт.
И тебе скажут, что этому багу 100 лет в субботу, они уже без тебя всё о нём знают, но нет, ещё не пофиксили, а когда пофиксят не знают.
мимонытик
>> No.40978 Reply
>>40976
Если давно знают, то можно и самому пофиксить. Значит, не такой важный баг.
>> No.40979 Reply
>>40978
А как ты пофиксишь баг в целевой платформе? В том же Qt код править можно только ли если ты свой код делаешь свободным или если платишь за Qt. Ещё хуже - браузер или .net какой-нибудь. Или ось.
>> No.40980 Reply
>>40979
Предложить патч, конечно же.
Алсо, проблема есть, да. Последний Qt её имеет. И не только с окнами, которые отправлены в бэкграунд, но и с теми, которые хотя бы раз были поставлены on top. Они потом просто не возвращаются из этого состояния.
Алсо, в примере есть небольшой баг, который не отображает, что флаг “всегда позади” включён. Но флаг вдействительности ставится.
Вообще, Qt плохо удаётся работать с хинтами для окон. В моём прошлом проекте был даже модуль zOrderManager, который, в обход qt'a, управлял сообщениями винды и устанавливал все окна в нужном порядке. Могу только посоветовать так же перехватывать сообщения окнам и самому отправлять окно назад вызовом API, а не через методы QWidget.
>> No.40982 Reply
>>40980
а что на счет SetParent? в винде же вроде несколько "глабальных окон", типа сначала - картинка, потом какие-нибудь значки рабочего стола, гаджеты, etc, не перерисовывают же они это всё каждый раз?
просто winapi значительно сложнее, по крайней мере для меня и я пытаюсь максимально сократить его использование. только полноценно заменить нечем(
>> No.40984 Reply
>>40982
> а что на счет SetParent?
Ничего. Ты же не хочешь парентом десктоп сделать, правда?
> просто winapi значительно сложнее
Просто тебе лень гугли api.
>> No.40985 Reply
>>40984
гуглить
>> No.41007 Reply
>>40984
> Ты же не хочешь парентом десктоп сделать, правда?
что в этом плохого?
> тебе лень гуглить api
скорее он хуже гуглится, в гораздо меньшей степени переведён на русский язык, да и оригинальные доки читаются хуже чем t`шные.а ещё код создания просто пустого окна на голом winapi больше раз в 20 минимум чем на qt. и вообще winapi - более низкоуровневая штука, для которой M$ даже запилила всякие обёртки типа mfcкоторые ничуть не лучше документированы
>> No.41008 Reply
>>41007
хуже чем qt`шные
>> No.41015 Reply
>>41007
> > что в этом плохого?
На SO не советуют.
> в гораздо меньшей степени переведён на русский язык
Ой вей!

Я тебе о чём вообще говорил? О вызове одной функции, которая отправит окно назад, а не о переписывании всего на win api.
>> No.41063 Reply
>>41015
> На SO не советуют.
ссыль?за минуту гугления ничего такого не нашёл
> многабукав
в моём понимании единственная функция которая просто отправляет окно назад как раз таки выставляет SetParent`om какой-нибудь hDefView (на данный момент у меня таковая даже имеется, но она каким-то образом конфликтует с setAttribute(Qt::WA_TranslucentBackground) - если выставить до вызова функции, то после вызова окно просто пропадает, если после - ничего не проиходит, окно по-прежнему непрозрачное, что довольно печально для всяких часиков и прочей нечисти)

как писать перехватчик событий и отправлять окно вниз оставляя его активным я не знаю, но что-то мне подсказывает что это займет во много раз больше кода чем выставление parent`a, опять же зачем изобретать лишний костыль

других вариантов вроде бы нет?
>> No.41470 Reply
File: as3JxckhJqU.jpg
Jpg, 26.38 KB, 424×338 - Click the image to expand
edit Find source with google Find source with iqdb
as3JxckhJqU.jpg
Гысспада, помогите подготовиться к зачету по кьюту. Среди заданий может попасться такое, где конструктор класса должен принимать строковый аргумент, который надо распарсить - например, дата в формате "31/12/2014", многочлен в виде "x^2 + 1" или что-то еще. Как из этой строки выделить основные данные и распихать их по переменным?

http://ideone.com/Jqo3dR
http://ideone.com/SFcEGY
>> No.43141 Reply
>>31597
О, таки нашел этот тред.
Суть вопроса. Есть виджет, который должен отобразить пикчу по факту ее загрузки от сети. Гружу через QNetworkAccessManager. Как более ли менее красиво это реализовать?
Пока что сделано так. В виджете есть слот, к которому привязан сигнал finished(QNetworkReply*) manager'а. Соответственно, в конструкторе виджета создаеться manager, к его сигналу коннектиться слот виджета ну и дальше делаеться запрос get.

Алсо, вообще, реквестирую гайды/литературу за написание многопоточных приложений с использованием Qt.
>> No.43180 Reply
Погуглил. Нагуглил на QEvent и прочие событийно ориентированные штуки.

Буду через них пилить, наверное.
>>43141-кун
>> No.43969 Reply
Гугл не помогает, я уже в отчаянии. Прошу кого-нибудь здесь подсказать. Как мне начать работу с базами данных в qt? Есть у меня mysql, есть qt, что необходимо сделать, чтобы можно было работать с бд через QSqlDataBase? А то в единственной документации по версии 5.5 про начало работы не говорится ни слова, кроме того, что нужно просто дописать QT += sql, но разумеется, этого не достаточно. Все остальные туториалы стары как говно мамонта. Еще где-то отыскал, что надо сделать плагин, но там какие-то совсем ебанутые комманды, выполняющиеся через какую-то ебанутую программу с ебанутыми названиями, плюс ко всему у меня отсутствует файл mysql.pro, который упоминается в каждом туториале по плагинам, в итоге нихуя не получается. В общем, надеюсь на вашу помощь, а то в голове царит уже какой-то невероятный хаос.
>> No.43976 Reply
File: 1371806628_Pimp-My-Ride.jpg
Jpg, 102.44 KB, 1000×750 - Click the image to expand
edit Find source with google Find source with iqdb
1371806628_Pimp-My-Ride.jpg
Есть вещь, которая меня бесит в современном мире IT. ДОФИГА технологий. Куча либ, куча каких-то приложений, куча АВТОМАТИЗАЦИЙ АВТОМАТИЗАЦИИ. И вроде бы всё неплохо, и всё нихуёво толкает ит в будущее. Но... я не знаю, но половину из этого хуй поставишь ровно сразу. То есть, есть тонна вещей, которые требуются от тебя, как от разработчика, и чтоб каждую из них поставить - нужно переизучать кипу мануалов.
И можно было бы ответить, что так правильно. Но вроде бы все эти вещи призваны упростить жизни. А иногда они только делают всё значительно сложнее.
Следовательно... мне кажется, скоро это утомит комьюнити. И появится нечто новое. Типа большого одного упростителя упростителей. Или новой методологии.
Что вы думаете? Только я такое ощущаю или вам тоже неуютно?
>> No.43978 Reply
>>43976
%не туда%
>> No.43982 Reply
>>43978
Внизу кнопка удалить пост.
>> No.44056 Reply
>>43969
Нужен драйвер БД, который для mysql, внезапно, в Qt уже есть. Так что подключаешь в своем .pro файле QT += sql и все должно работать. Что у тебя конкретно не работает?
>> No.45652 Reply
Подбросьте, пожалуйста, какую-нибудь понятную статью/заметку в бложике/брошюрку о программировании GUI для простеньких программ на Qt. То есть о самых основах. Например, хочу программу, которая решает квадратное уравнение по коэффициентам. Набросал графический интерфейс в Qt Designer и теперь не понимаю, как связать его с функционалом программы (то есть введённые пользователем коэффициенты из окошечка отправились в программу по нажатию кнопки, а ответ из программы вывелся в другое окошечко). До этого никогда с GUI дел не имел, писал код в Emacs и компилировал GCC, а тут какие-то YOBA IDE надо осваивать.
>> No.45653 Reply
>>45652
Или простейший код, где видно как происходит передача информации от графической формы к коду программы и в обратную сторону.
>> No.45658 Reply


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]