1771
|
Программирование / С/C++ / Re: Как узнать о типе, до выполнения dynamic_cast?
|
: Март 07, 2011, 12:00
|
Вот здесь второй вопрос. Есть момент, когда dt имеет указатель не инициализированный класс. Т.е. был объявлен указатель, но без вызова конструктора, потом его присвоили dt. Но, в таком случае, при проверке dynamic_cast вылетает системная ошибка (точнее сигнал от системы). Через особые ситуации я его отловить не смог (даже, через catch(...) ). Вот мне интересно, есть ли способ от него защититься или все же следить за тем, чтобы у указательных объектов перед из передачей указателю базового класса, использовались конструкторы?
Вот, вот, вместо того, чтобы сесть, тчательно подумать над архитектурой, проникнуться теорией, а уже потом имея фундамент, что то ваять, лучше тратить время на то, чтобы учится создавать костыли и костыли для костылей и т.д. Герой на героине, Героине на героине.. не возникнет ли у меня утечки памяти?
Возникнет, обязательно)
|
|
|
1772
|
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));
Чувствую на этом топик не закончится..
|
|
|
1774
|
Qt / Вопросы новичков / Re: Простые функции.
|
: Март 06, 2011, 21:17
|
Всем добрый вечер. Прошу не ругайть за очень простой вопрос.
Какая функция отвечает за возвидение в степень в qt?
Спасибо.
Никакая) Это делает pow из cmath
|
|
|
1776
|
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);
|
|
|
1778
|
Qt / Пользовательский интерфейс (GUI) / Re: QTableWidget и QSpinDoubleBox
|
: Март 05, 2011, 18:48
|
У меня сигнал свой, который указатель на сам себя возвращает при изменении значения спинбокса, так что все в порядке Улыбающийся
Ааа... Ну раз сейчас такие костыли в порядке вещей.. Тогда наверно нужно зарегистрировать ваш тип MySpinBox*. Почитайте про Q_DECLARE_METATYPE, QMetaType
|
|
|
1780
|
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.. или уже что то новое придумали?
|
|
|
1783
|
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; }
|
|
|
1785
|
Программирование / С/C++ / Re: Где взять информацию про имеющиеся классы исключений на Си++?
|
: Март 03, 2011, 16:08
|
Конечно так бывает, но посмотрим на конкретный класс NNumric: разве он знает что делать с ошибкой? Никак не знает, и ненужно/вредно было бы добавлять в него эту ф-циональность. Поэтому он должен выкинуть ошибку наверх, напр тому кто заряжал аргументы, а тот уж пусть разбирается. На мой взгляд здесь классический случай exception.
Ну я вообще то это всё к тому, что механизм сигнал-слот справляется с такой ситуацией (когда обработчик может исправить ситуацию и вернуть управление) справляется, согласитесь, изящьнее, нежели стандартный сценарий исключений) К тому же, хочу заметить, что в самой функции (или в классе) exceptionHandler также можно кинуть обычное исключение, например если уж совсем всё плохо) : C++ (Qt) void exceptionHandler(const exception_type &e) { if (e.arg2 == "Mein Gott!!!") throw MyException; cout << e.arg1 << endl; cout << e.arg2 << endl; cout << e.arg3 << endl; const double epsilon = 0.0000001; e.arg3 = epsilon; }
|
|
|
|
|