crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Как добавить свои слоты в Qt Designer
Artes
  опции профиля:
сообщение 31.7.2009, 22:39
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 31.7.2009
Пользователь №: 974

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я начал изучать Qt с книги по Qt 3 в то время, как на днях скачал самую последнюю версию Qt на офф сайте под Linux. Соответственно присутствуют большие отличия между тем, что написано в книге и тем, на чём я работаю. Эти различия были несущественны до того момента, как необходимо было добавить свой собственный слот в Qt Designer. В книге явно был напечатан скрин того, как в форме редактирования слотов есть кнопка Edit Slots для того, чтобы добавить свой слот, описав свой собственный метод, однако в последней версии такой кнопки почему-то не оказалось. Как я только не пытался добавить свой слот или найти эту кнопку, всё бесполезно. На введённые вручную в код слоты дизайнер не реагирует и не показывает их у себя и соответственно они не работают. Вручную весь код писать не хочется, когда есть такое удобное средство, как Qt Designer. Если знаете как добавить новые слоты к классу или объекту, например, обычной кнопки, то объясните пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2009, 7:41
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Дизайнер Qt4 работает совсем по другому, он не генерирует код, его файлы - *.ui - это XML.

И я думаю, что в дизайнере нельзя создать свой слот, так как слот - это метод конкретного класса-наследника от QObject.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 1.8.2009, 12:31
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 1.8.2009, 8:41) *
И я думаю, что в дизайнере нельзя создать свой слот, так как слот - это метод конкретного класса-наследника от QObject.


На примере QtCreator'a, но в дизайнере тот же функционал. http://www.youtube.com/watch?v=Ca8ItRtU0AA
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2009, 13:28
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 1.8.2009, 16:31) *
но в дизайнере тот же функционал.
да, действительно есть такая возможность.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Artes
  опции профиля:
сообщение 1.8.2009, 14:33
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 31.7.2009
Пользователь №: 974

Спасибо сказали: 0 раз(а)




Репутация:   0  


QMessageBoxx это конечно хорошо, но в нормальном слоте обычно используются данные класса, например мне надо, чтобы кнопка pushButton исчезла, для этого мне нужно как-то до неё докапаться через класс Ui_MainWindow, так как в классе MainWindow она не объявлена, а объявлена именно в Ui_MainWindow. Во первых, это напрягает, во вторых при попытке откомпиллировать код, в котором присутствует такой слот,

void MainWindow::MySlot()
{
Ui_MainWindow::pushButton->setEnabled(false);
}

компиллятор ругается уже на сам класс Ui_MainWindow со словами:

error: object missing in reference to ‘Ui_MainWindow::pushButton’


Мои извинения за то, что вас в лишний раз потревожил, так как проблема решена :)
Оказалось, что я не заметил в классе mainwindow.h приватной переменной-указателя на создаваемый объект класса Ui_MainWindow

private:
Ui::MainWindow *ui;

Вот это и есть указатель, по которому надо всегда обращаться к даным класса Ui_MainWindow.
Теперь достаточно написать в объявлении слота следующее:

void MainWindow::MySlot()
{
ui->pushButton->setEnabled(false);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2009, 16:25
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Artes @ 1.8.2009, 18:33) *
QMessageBoxx это конечно хорошо, но в нормальном слоте обычно используются данные класса, например мне надо, чтобы кнопка pushButton исчезла, для этого мне нужно как-то до неё докапаться через класс Ui_MainWindow, ...
Вообще это мимо темы. Тема называется "Добавление своих слотов в Qt Designer"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.9.2024, 22:30