Russian Qt Forum
Ноябрь 24, 2024, 06:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: как переопределить mouseDoubleClickEvent?  (Прочитано 25305 раз)
Senia_Bezrubashkin
Гость
« : Декабрь 29, 2012, 01:01 »

Приложение состоит из двух окошек... В левом окошке - список таблиц (sqlite) и эта часть есть, в правом - выбранная двойным кликом таблица (ну, хотелось бы так) из левого окошка, получается только таблица которая параметром передается в конструктор. Все, что я понял из прочитанного, так это то, что нужно переопределить mouseDoubleClickEvent(), но как это сделать, как к этому подступиться - нет ни единой мысли. Может кто подскажет или на пример какой ссыль даст (перерыл инет, примеров не нашел подходящих... были примеры, то координаты по клику выдает, то файл открывает... все не то).
Заранее спасибо.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 29, 2012, 03:29 »

думаю тебе больше подойдет сигнал void QListWidget::itemDoubleClicked ( QListWidgetItem * item ) если используешь QListWidget или void QAbstractItemView::doubleClicked ( const QModelIndex & index ) если используешь модель/представление. надеюсь как связать сигнал со слотом ты знаешь.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #2 : Декабрь 31, 2012, 01:58 »

Слабо помогло... и походу возникли еще вопросы. Пока пытался разобраться определил пустой слот
Код:
void loadTable(const QString &tableName){}
вот так его связал с событием doubleClicked()
Код:
connect(sender, SIGNAL(doubleClicked())
        this, SLOT(loadTable(tableName)));
Вопросы такие... если я переопределил (пусть и пустым слотом) реакцию на событие, то почему приложение сохраняет прежнее поведение (по двойному клику возникает поле редактирования, по типу - переименовать файл). И второй... может я не правильно параметр  sender ставлю... хотя там выбор не велик... это были
Код:
view_1 = new QListView(this);
или
Код:
    model_1 = new QStringListModel(this);
пробовал со обоими.
Записан
Senia_Bezrubashkin
Гость
« Ответ #3 : Декабрь 31, 2012, 02:24 »

Блин... в doubleClicked() еще параметр передавать нужно (const QModelIndex & index)... и как это делать? Походу, это еще один вопрос.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Декабрь 31, 2012, 04:11 »

надеюсь как связать сигнал со слотом ты знаешь.
похоже, я ошибся. пойди почитай про сигналы и слоты ещё.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #5 : Декабрь 31, 2012, 12:39 »

Почитал... все что было у Шлее (в очередной раз!). В заголовочном прописал так...
Код:
private slots:
    void loadTable(const QString &tableName);
                ...........................
private:
    void doubleClicked(const QModelIndex & index);
В .срр так...
Код:
connect(this, SIGNAL(doubleClicked(1)), this, SLOT(loadTable(tableName)));
                ............................
void MainWindow::loadTable(const QString &tableName){}

(loadTable() определил пустым). В doubleClicked(1) впихнул единицу... ну, что б что-то было (там же вроде параметр - целочисленное значение должно быть), ну, что б хотя бы заработало. И... нифига не переопределяется поведение. И как индекс передавать в doubleClicked() все равно не ясно.
« Последнее редактирование: Декабрь 31, 2012, 12:48 от Senia_Bezrubashkin » Записан
mutineer
Гость
« Ответ #6 : Декабрь 31, 2012, 12:58 »

Код:
connect(this, SIGNAL(doubleClicked(1)), this, SLOT(loadTable(tableName)));
Где ты прочитал, что сигналы и слоты связываются так?

При соединении указываются типы параметров, а не значения или имена

Зачем ты в private вписал метод, который называется так же, как и сигнал? Этот код не имеет смысла и уж точно в книгах по Qt не учат так писать
« Последнее редактирование: Декабрь 31, 2012, 13:01 от mutineer » Записан
Senia_Bezrubashkin
Гость
« Ответ #7 : Декабрь 31, 2012, 13:17 »

При соединении указываются типы параметров, а не значения или имена
поправил
Зачем ты в private вписал метод, который называется так же, как и сигнал?
(Макс Шлее Qt4.5 2010г. стр. 46 второй абзац.)
ага... каша из прочитанного... оказывается говорилось о сигналах которые определяешь сам (наверное).
Но... и после всех этих изменений поведение не переопределяется, и с получением индекса все равно не ясно как его получать.
« Последнее редактирование: Декабрь 31, 2012, 13:23 от Senia_Bezrubashkin » Записан
mutineer
Гость
« Ответ #8 : Декабрь 31, 2012, 13:21 »

Индекс кликнутого элемента передается в твой слот через параметр сигнала. А у твоих сигнала и слота типы параметров не совпадают, соответственно соединить их и не получится. Почитай матчасть по поводу сигналов-слотов
Записан
Senia_Bezrubashkin
Гость
« Ответ #9 : Декабрь 31, 2012, 13:24 »

т. е. если соединение не происходит - сохраняется старое поведение?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Декабрь 31, 2012, 13:27 »

старое поведение никуда не девается. просто при успешном соединении вызывается дополнительный обработчик, т.е. соединённый слот.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #11 : Декабрь 31, 2012, 13:53 »

Параметры сигнала и слота теперь соответствуют. Слот по-прежнему определяю пустым. Поведение не меняется, т. е. соединение не происходит. Ничего не вгоню.
Записан
Bepec
Гость
« Ответ #12 : Декабрь 31, 2012, 14:30 »

Чем больше вы кормить нас будете жалобами нас кормить без кода, ничем мы вам не поможем. А я лично начну троллить.
Записан
Senia_Bezrubashkin
Гость
« Ответ #13 : Декабрь 31, 2012, 14:54 »

Чем больше вы кормить нас будете жалобами нас кормить без кода, ничем мы вам не поможем. А я лично начну троллить.
Код:
connect(this, SIGNAL(doubleClicked(const QModelIndex &)),
        this, SLOT(loadTable(const QModelIndex &)));
void MainWindow::loadTable(const QModelIndex & tableIndex){}

и в хедере
Код:
private slots:
    void loadTable(const QModelIndex & tableIndex);
Это все, что изменилось... остальной код такой же, как описано выше.
« Последнее редактирование: Декабрь 31, 2012, 15:16 от Senia_Bezrubashkin » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Декабрь 31, 2012, 15:38 »

а теперь внимательно почитай кто является источником сигнала doubleClicked() (т.е. кто его испускает), и это вовсе не this (подсказка есть в первом ответе темы)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.