crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Несколько вопросов про QTreeWidget
breeve
  опции профиля:
сообщение 4.1.2010, 15:27
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

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




Репутация:   1  


Я создал иерархический список добавил в него одну позицию, и пытаюсь сделать связь.
В этом классе есть сигнал
Цитата
void QTreeWidget::itemClicked ( QTreeWidgetItem * item, int column ) [signal]

Так вот я написал
    twg = new QTreeWidget;
    home = new QTreeWidgetItem(twg);
    home->setText(0, "Home");
    twg->setItemExpanded(home, true);
    connect(twg, SIGNAL(itemClicked(home, 0)), this, SLOT(welcome()));

Мне выводится ошибка:
Цитата
Object::connect: No such signal QTreeWidget::itemClicked(home, 0) in mainwindow.cpp:37

Программа запускается .. я нажимаю на home.. и ничего не происходит.. Что не так делаю?

Сообщение отредактировал breeve - 4.1.2010, 15:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 4.1.2010, 15:37
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

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




Репутация:   0  


Цитата(breeve @ 4.1.2010, 14:27) *
connect(twg, SIGNAL(itemClicked(home, 0)), this, SLOT(welcome()));

правильно писать так:
connect(twg, SIGNAL(itemClicked(QTreeWidgetItem *, int )), this, SLOT(welcome(QTreeWidgetItem *, int)));

макрос SIGNAL принимает строку const char* в качестве параметра, сигнал и слот принимают только типы параметров а не сами данные
у сигнала и слота должны быть одинаковые параметры(в этом случае (QTreeWidgetItem *, int)) - это уточни в доке

лучше почитай в доке по методу QObject::connect()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 4.1.2010, 16:01
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 188
Регистрация: 26.12.2009
Пользователь №: 1336

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




Репутация:   1  


Че то помоему это какой-то бред))
Разве может функция принимать на параметр только тип "SIGNAL(itemClicked(QTreeWidgetItem *, int )"?
Тем более в доке же ясно написано QTreeWidget::itemClicked ( QTreeWidgetItem * item, int column ) ..
А item это как раз мой home.. А насчет слота.. Создавал я его сам.. и поэтому какие там могут быть параметры..

А в доке про connect так и написано.. :blush2:
изменил вот так:
connect(twg, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(welcome()));
и все работает.. спасибо

А как мне слот welcome() поменять чтобы, нажатие home одно на на что-то другое - другое?
void MainWindow::welcome()
{
        textEdit->setHtml(tr("<html>"
                      "<body>"
                      "<div align=\"center\"><h1>Blender</h1></div>"
                      "<div align=\"left\"><p>Blender — пакет для создания трёхмерной компьютерной графики, включающий в"
                      "себя средства моделирования, анимации, рендеринга, постобработки видео, а"
                      "также создания интерактивных игр.</p><p>Особенностями пакета являются малый размер, высокая скорость рендеринга,"
                      "наличие версий для множества операционных систем — FreeBSD, GNU/Linux, Mac OS X, SGI Irix 6.5, Sun Solaris 2.8 (SPARC),"
                      "Microsoft Windows, SkyOS, MorphOS и Pocket PC. Пакет имеет такие функции, как динамика твёрдых тел, жидкостей и мягких "
                      "тел, систему горячих клавиш, большое количество легко доступных расширений, написанных на языке Python.</p>"
                      "Программа является свободным программным обеспечением и распространяется под лицензией GNU GPL.</div>"
                      "</body>"
                      "</html>"));

}


Естественно надо параметры поставить.. а дальше то как?

Я кажется понял если не правильно, то поправьте.. Сравнивать два указателя (параметр и home) и далее выводить..

Сообщение отредактировал breeve - 4.1.2010, 15:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DIMEDROLL
  опции профиля:
сообщение 4.1.2010, 16:01
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 165
Регистрация: 28.9.2008
Из: Киев
Пользователь №: 304

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




Репутация:   0  


Цитата(breeve @ 4.1.2010, 14:46) *
Че то помоему это какой-то бред))
Разве может функция принимать на параметр только тип "SIGNAL(itemClicked(QTreeWidgetItem *, int )"?

хех, функция не может, но ты ведь передаешь не функцию а ее имя и типы параметров которые преобразуются макросом SIGNAL в строку типа:
const char* str = "itemClicked(QTreeWidgetItem *, int )"
почитай еще доку по SIGNAL и SLOT, а лучше глянь их реализацию в исходном коде, так сразу и поймешь

Цитата
А как мне слот welcome() поменять чтобы, нажатие home одно на на что-то другое - другое?

это что значит?

Сообщение отредактировал DIMEDROLL - 4.1.2010, 16:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.1.2010, 16:23
Сообщение #5


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

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

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




Репутация:   94  


Цитата(breeve @ 4.1.2010, 19:01) *
Тем более в доке же ясно написано
читай доку по QObject::connect, там действительно явно написано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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