Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.10.130] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
какая то непонятка с conection ом.
Qt Designer ом зделал простой дилалог и поместил кнопки. он мне сгенерилл файл создал баноны все нормально. но теперь надо связать батон с каким то собитием. делаю так namespace Ui { class Dialog: public Ui_Dialog { public: Dialog() { flg = connect(pushButton, SIGNAL(clicked()), this,SLOT(methode_for_first_button())); } virtual ~Dialog(){}; public slots: void methode_for_first_button() { QMessageBox::Ok; } protected : static bool flg; }; } // namespace Ui и уже в main е . Ui::Dialog ui; QDialog * dialog = new QDialog; ui.setupUi(dialog); dialog->show(); но при нажатие на бутон не какого событие не происходит. где я что пропустил? |
Сообщ.
#2
,
|
|
|
Цитата knut @ QMessageBox::Ok; Может, QMessageBox::Ok(); |
Сообщ.
#3
,
|
|
|
Цитата knut @ void methode_for_first_button() { QMessageBox::Ok; } void methode_for_first_button() { this->done(QMessageBox::Ok); } |
Сообщ.
#4
,
|
|
|
вроде простой пример но вопросов дофига.
1.в сгенериированном фаиле где и обявленны и созданны все элементы диалогового окна(ui_untitled.h) есть созданный класс наследник Ui_Dialog а Dialog.так вот все методы, слоты, и все остальное что я обявляю в классе после rebuild a исчезают. т.е файл возврош. к исходному состоянию.(каким был после создания) почему? mo3r Цитата QMessageBox::Ok(); какая разница QMessageBox::Ok(); или QMessageBox::Ok; у меня flg = connect(pushButton, SIGNAL(clicked()), this,SLOT(methode_for_first_button())); после конекта connect возврошает false. он по любому должен вызвать methode_for_first_button() |
Сообщ.
#5
,
|
|
|
Цитата knut @ почему? Потому что во время ребилда uic генерирует на основе *.ui соответствуюющие ui_*.h. По твоему он должен выискивать изменения, сделанные тобой и вставлять их в новую версию? А разве в комментариях там не написано, что файл генерируется автоматически и любые изменения могут быть затёрты? Цитата knut @ какая разница QMessageBox::Ok(); или QMessageBox::Ok; А по твоему разницы нет? Ок, а что вообще такое QMessageBox::Ok? Тип? Ф-ция? Шаблон? Значение? Как только ответишь на этот вопрос, ещё задумайся над тем какая разница между 5; и 5();. Цитата knut @ после конекта connect возврошает false. 1. Поместить объявление класса в хэдер. 2. namespace Ui { class Dialog: public Ui_Dialog { Q_OBJECT // добавить вот это public: Dialog() // ... 3. Убедиться, что этот хэдер прогоняется через moc. Добавлено Цитата knut @ он по любому должен вызвать methode_for_first_button() Кто должен вызывать? 0_о |
Сообщ.
#6
,
|
|
|
archimed7592
Цитата А по твоему разницы нет? разница конечно есть.я не о разнице говорю.(и не отрецаю правату ответа и свою ошибку:)) я о том что при конекте должен вызеватся метод methode_for_first_button(каторый не вызевается) а уже потом реализацыя метода:) по поводу *.ui файла. так что выходет я реализовал класс обявил методы реализовал их и после ребилда копец всему? не чего не остается? если так то использовать класс(т.е такой подход неправильно). |
Сообщ.
#7
,
|
|
|
Цитата knut @ я о том что при конекте должен вызеватся метод methode_for_first_button(каторый не вызевается) Кто тебе сказал такую глупость? Эти строки flg = connect(pushButton, SIGNAL(clicked()), this,SLOT(methode_for_first_button())); эквивалентны этим: flg = connect(pushButton, "clicked()", this,"methode_for_first_button()"); Добавлено Цитата knut @ (т.е такой подход неправильно). В корне неправильный. Обычно делают так(в отдельном файле): class MyWidget : public Ui::Dialog { /* ... */ } |
Сообщ.
#8
,
|
|
|
archimed7592
что за ошибки? Цитата Error 1 error C2039: 'staticMetaObject' : is not a member of 'Ui::Dialog' Error 2 error C2039: 'qt_metacast' : is not a member of 'Ui::Dialog' Error 3 error C2039: 'qt_metacall' : is not a member of 'Ui::Dialog' как убераю Q_OBJECT все нормально собирается. |
Сообщ.
#9
,
|
|
|
Код покажи полностью.
|
Сообщ.
#10
,
|
|
|
//Wighet.h
class CMyWidget:public Ui::Dialog { Q_OBJECT public: CMyWidget(); virtual ~CMyWidget(){}; public slots: void methode_for_first_button(){//impl.} protected : static bool flg; }; //Wighet.cpp CMyWidget::CMyWidget() { connect(pushButton, SIGNAL(clicked()), this,SLOT(methode_for_first_button())); connect(pushButton, SIGNAL(clicked()), this,SLOT(methode_for_second_button())); } ///... |
Сообщ.
#11
,
|
|
|
Цитата knut @ class CMyWidget:public Ui::Dialog Что такое Ui::Dialog? Твой класс? Добавлено Короче, по простому говоря, вот тебе общее правило: любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки. |
Сообщ.
#12
,
|
|
|
это класс потомок класс а Ui_Dialog каторый описевает мое диалог. окно(созданное Qt Designer ом)
Добавлено изв. не потомок а неследник |
Сообщ.
#13
,
|
|
|
Цитата knut @ это класс потомок класс а Ui_Dialog каторый описевает мое диалог. У него есть Q_OBJECT в определении? |
Сообщ.
#14
,
|
|
|
Цитата У него есть Q_OBJECT в определении? нет. вопрос по поводу общого правила. а если в классе есть какое обевление pushButton = new QPushButton(Dialog);( у QPushButton есть в обявление Q_OBJECT ) то правило надо преминять? |
Сообщ.
#15
,
|
|
|
Цитата knut @ нет. Цитата archimed7592 @ любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки. Цитата knut @ а если в классе есть какое обевление pushButton = new QPushButton(Dialog);( у QPushButton есть в обявление Q_OBJECT ) то правило надо преминять? Цитата archimed7592 @ любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки. |