1771
|
Программирование / С/C++ / Re: Как узнать о типе, до выполнения dynamic_cast?
|
: Марта 07, 2011, 15:25
|
Вот, вот, вместо того, чтобы сесть, тчательно подумать над архитектурой, проникнуться теорией, а уже потом имея фундамент, что то ваять, лучше тратить время на то, чтобы учится создавать костыли и костыли для костылей и т.д. Герой на героине, Героине на героине..   Ну я лично использую тот же метод что и Eten (ваять а там разберемся) и не считаю что это хуже. Просто надо более крытычно относиться к написанному и не бояться переделок. А "заложить фундамент" не всегда возможно, никогда не предусмотреть всего заранее. Не спорю, что всего заранее не предусмотреть. Но, "заложить фундамент" я понимаю как некий основной теор. минимум: как вообще другие с подобными проблемами справлялись, есть ли отточенные решения для этой ситуации, какие инструменты ит.д. И под архитектурой я вовсе не имею ввиду окончательный вариант, но некий интерплей между объектами, их обязанности, иерархия, какие то свойства основные.. Короче, хотел выразить мысль, что картина вырисовывается не из-за понятий, а из взаимоотношений между ними.. Как то так)) К тому же, хуже от того, чтобы вначале подумать, взять листочек с ручкой, почеркать, походить, покурить точно не будет) (разве что от покурить)))
|
|
|
1772
|
Программирование / С/C++ / Re: Как узнать о типе, до выполнения dynamic_cast?
|
: Марта 07, 2011, 12:00
|
Вот здесь второй вопрос. Есть момент, когда dt имеет указатель не инициализированный класс. Т.е. был объявлен указатель, но без вызова конструктора, потом его присвоили dt. Но, в таком случае, при проверке dynamic_cast вылетает системная ошибка (точнее сигнал от системы). Через особые ситуации я его отловить не смог (даже, через catch(...) ). Вот мне интересно, есть ли способ от него защититься или все же следить за тем, чтобы у указательных объектов перед из передачей указателю базового класса, использовались конструкторы?
Вот, вот, вместо того, чтобы сесть, тчательно подумать над архитектурой, проникнуться теорией, а уже потом имея фундамент, что то ваять, лучше тратить время на то, чтобы учится создавать костыли и костыли для костылей и т.д. Герой на героине, Героине на героине..  не возникнет ли у меня утечки памяти?
Возникнет, обязательно)
|
|
|
1773
|
Qt / Вопросы новичков / Re: Простые функции.
|
: Марта 07, 2011, 10:46
|
Не работает... /home/sergey/Документы/TRPO/trpo.cpp:134: error: request for member ‘setText’ in ‘formyla’, which is of non-class type ‘QLabel*’
Мда... Скорей бы программы сами себя научились писать)) C++ (Qt) formula->setText(QString::number(i));
Чувствую на этом топик не закончится..
|
|
|
1775
|
Qt / Вопросы новичков / Re: Простые функции.
|
: Марта 06, 2011, 21:17
|
Всем добрый вечер. Прошу не ругайть за очень простой вопрос.
Какая функция отвечает за возвидение в степень в qt?
Спасибо.
Никакая) Это делает pow из cmath
|
|
|
1777
|
Qt / Вопросы новичков / Re: Сортировка QList<QString>
|
: Марта 06, 2011, 20:07
|
C++ (Qt) bool comp(const QString &a, const QString &b) { return a.size() > b.size(); } QList<QString> list; // или просто QStringList list ... qSort(list.begin(), list.end(), comp);
|
|
|
1779
|
Qt / Пользовательский интерфейс (GUI) / Re: QTableWidget и QSpinDoubleBox
|
: Марта 05, 2011, 18:48
|
У меня сигнал свой, который указатель на сам себя возвращает при изменении значения спинбокса, так что все в порядке Улыбающийся
Ааа... Ну раз сейчас такие костыли в порядке вещей.. Тогда наверно нужно зарегистрировать ваш тип MySpinBox*. Почитайте про Q_DECLARE_METATYPE, QMetaType
|
|
|
1781
|
Qt / Пользовательский интерфейс (GUI) / Re: QTableWidget и QSpinDoubleBox
|
: Марта 05, 2011, 18:00
|
Устанавливаю так: MySpinBox *dsb = new MySpinBox(MySpinBox::SpinBoxForTime); //MySpinBox наследован от QSpinDoubleBox connect(dsb,SIGNAL(valueChanged(MySpinBox*)),SLOT(onValueChanged(MySpinBox*))); //присоединение сигнала к слоту ui->tableWidget->setCellWidget(0,0,dsb);
в идеале хотелось бы получить такой-же сигнальчик, как во второй строке кода, только по получению спинбоксом фокуса ввода. Это не правильно. Так не надо устанавливать. надо как то так: C++ (Qt) connect(dsb, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
QSpinDoubleBox - это в смысле QDoubleSpinBox.. или уже что то новое придумали?
|
|
|
1784
|
Qt / Кладовая готовых решений / Re: Частный случай механизма сигнал-слот
|
: Марта 05, 2011, 03:47
|
Вышла версия 3.1.1 Добавлен следующий функционал: 1) Поддержка приоритета соединения: Теперь каждое соединение имеет свойство connection_priority: C++ (Qt) template <class R_return> int connection_priority(R_return (*slot)()) const ... // и так далее, для всех типов слотов Обработка слотов идёт в порядке убывания этого значения, т.е. соединение с самым высоким значением обрабатывается первым и т.д. При отрицательных значениях connection_priority соединение блокируется (не обрабатывается). По умолчанию connection_priority = 0. Изменить его можно либо явно задав при создании соединения: C++ (Qt) a.sig_a.connect(&b, &B::slot_b1, 1); // connection_priority = 1 либо с помощью метода: C++ (Qt) template <class R_return, class R_arg> bool set_connection_priority(R_return (*slot)(R_arg), int priority) ...
Если изменение приоритета прошло удачно, возвращает true, в противном случае false: C++ (Qt) a.sig_a.set_connection_priority(&b, &B::slot_b4, 100); // connection_priority = 100 Пример использования: C++ (Qt) #include <iostream> #include "signal_slot.h" using namespace std; class A { public: ssc::signal<int> sig_a; void run() const { sig_a(123); } }; class B : public ssc::trackable { public: void slot_b1(int x) { cout << "slot_b1, x = " << x << endl; } void slot_b2(int x) { cout << "slot_b2, x = " << x << endl; } void slot_b3(int x) { cout << "slot_b3, x = " << x << endl; } void slot_b4() { cout << "slot_b4" << endl; } void slot_b5() { cout << "slot_b5" << endl; } }; int main() { A a; B b; /* по умолчанию connection_priority = 0*/ a.sig_a.connect(&b, &B::slot_b1, 1); a.sig_a.connect(&b, &B::slot_b2, 2); a.sig_a.connect(&b, &B::slot_b3, 3); a.sig_a.connect(&b, &B::slot_b4, 4); a.sig_a.connect(&b, &B::slot_b5, 5); a.sig_a.set_connection_priority(&b, &B::slot_b4, 100); cout << "slot_b1, priority = " << a.sig_a.connection_priority(&b, &B::slot_b1) << endl; cout << "slot_b2, priority = " << a.sig_a.connection_priority(&b, &B::slot_b2) << endl; cout << "slot_b3, priority = " << a.sig_a.connection_priority(&b, &B::slot_b3) << endl; cout << "slot_b4, priority = " << a.sig_a.connection_priority(&b, &B::slot_b4) << endl; cout << "slot_b5, priority = " << a.sig_a.connection_priority(&b, &B::slot_b5) << endl; cout << endl; a.run(); return 0; }
|
|
|
|
|