Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как добавить свои слоты в Qt Designer
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt инструментарий
Artes
Я начал изучать Qt с книги по Qt 3 в то время, как на днях скачал самую последнюю версию Qt на офф сайте под Linux. Соответственно присутствуют большие отличия между тем, что написано в книге и тем, на чём я работаю. Эти различия были несущественны до того момента, как необходимо было добавить свой собственный слот в Qt Designer. В книге явно был напечатан скрин того, как в форме редактирования слотов есть кнопка Edit Slots для того, чтобы добавить свой слот, описав свой собственный метод, однако в последней версии такой кнопки почему-то не оказалось. Как я только не пытался добавить свой слот или найти эту кнопку, всё бесполезно. На введённые вручную в код слоты дизайнер не реагирует и не показывает их у себя и соответственно они не работают. Вручную весь код писать не хочется, когда есть такое удобное средство, как Qt Designer. Если знаете как добавить новые слоты к классу или объекту, например, обычной кнопки, то объясните пожалуйста.
Litkevich Yuriy
Дизайнер Qt4 работает совсем по другому, он не генерирует код, его файлы - *.ui - это XML.

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


На примере QtCreator'a, но в дизайнере тот же функционал. http://www.youtube.com/watch?v=Ca8ItRtU0AA
Litkevich Yuriy
Цитата(SABROG @ 1.8.2009, 16:31) *
но в дизайнере тот же функционал.
да, действительно есть такая возможность.
Artes
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
Цитата(Artes @ 1.8.2009, 18:33) *
QMessageBoxx это конечно хорошо, но в нормальном слоте обычно используются данные класса, например мне надо, чтобы кнопка pushButton исчезла, для этого мне нужно как-то до неё докапаться через класс Ui_MainWindow, ...
Вообще это мимо темы. Тема называется "Добавление своих слотов в Qt Designer"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.