crossplatform.ru

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

> Не могу получить текущую выделенную строку, QTableWidget и класс наследник QTableWidget
RazrFalcon
  опции профиля:
сообщение 11.3.2011, 20:49
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


.cpp
#include "mainwindow.h"
MainWindow::MainWindow()
{
    table = new tableWidget(this);
    table->setColumnCount(14);
    table->setRowCount(50);
    table->setSelectionBehavior(QAbstractItemView::SelectRows);

    setCentralWidget(table);

    connect(table,SIGNAL(cellClicked(int,int)),this,SLOT(on_cellClicked(int,int)));

    setMinimumSize(800,650);
}

void MainWindow::on_cellClicked(int row,int)
{
    qDebug()<<row;
    qDebug()<<"From MainWindow class"<<table->currentRow();
}

void MainWindow::on_currentRowIndexChanged(int row)
{
    qDebug()<<"From currentRowIndexChanged func"<<table->currentRow();
}

void tableWidget::keyPressEvent(QKeyEvent *event)
{
    MainWindow my;
    qDebug()<<my.table->rowCount();
    qDebug()<<"From tableWidget class"<<my.table->currentRow();
    my.table->setRowCount(600);
    my.on_currentRowIndexChanged(1);

    QTableWidget::keyPressEvent(event);
}
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>
#include <QtDebug>

class tableWidget : public QTableWidget
{
    Q_OBJECT

public:
    tableWidget(QWidget* parent = 0) {}
    void keyPressEvent(QKeyEvent *event);
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();
    tableWidget *table;

public slots:
    void on_cellClicked(int row,int col);
    void on_currentRowIndexChanged(int row);
};
#endif // MAINWINDOW_H


Вывод консоли:
При клике:
6 
From MainWindow class 6

При нажатии клавиши:
50 
From tableWidget class -1
From currentRowIndexChanged func -1


Задача: получить номер текущей выделенной строки и передать ее в on_cellClicked

Сообщение отредактировал RazrFalcon - 11.3.2011, 20:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 9)
abc
  опции профиля:
сообщение 11.3.2011, 21:46
Сообщение #2


Участник
**

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

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




Репутация:   4  


ты создал окно в KeyPressed, но никакую строку, конечно, не выделил, и currentRow возвращает -1 за неимением текущей строки
а onCellClicked сама даёт тебе номер строки, в чём недопонимание? моё или твоё?)

Сообщение отредактировал abc - 11.3.2011, 21:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.3.2011, 23:23
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


onCellClicked - говорит само за себя, а мне нужно получать номер строки при использовании клавиш вниз и вверх. Для этого использовал класс перехвата нажатий клавиатуры. Он понимает что я нажал вниз, выделение спустилось на одну строку ниже, а индекс -1. Вот в чем проблема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 11.3.2011, 23:49
Сообщение #4


Участник
**

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

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




Репутация:   4  


Объясни, что у тебя делает
MainWindow my;
в tableWidget::keyPressEvent?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.3.2011, 23:55
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Так я пытался обратится к таблице. Она в MainWindow определена и используется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 12.3.2011, 0:04
Сообщение #6


Участник
**

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

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




Репутация:   4  


Таблице ничего не нужно знать о MainWindow
Слот изменяющий строку должен быть методом класса таблицы, не MainWindow
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.3.2011, 0:12
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Цитата(abc @ 11.3.2011, 23:04) *
Слот изменяющий строку должен быть методом класса таблицы, не MainWindow

А можно пример кода, а то я ничего не понял. <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 12.3.2011, 0:20
Сообщение #8


Участник
**

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

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




Репутация:   4  


Это я ничего не понял) Только что создал окошко, посадил туда таблицу. При нажатиях клавиш, выделение двигается - остаётся только соединить сигнал
void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )
со своим слотом,
и ты в этом слоте получишь все эти значения:
int currentRow, int currentColumn, int previousRow, int previousColumn

не нужно тебе наследование от QTableWidget и KeyPressEvent


Ну, и поясню, что я до этого городил.
Если у тебя есть класс А, член класса Б, то ты не можешь нуждаться в методах класса Б в классе А. Б использует А, а не наоборот. Жутко формулирую?( Тем более ты не можешь создавать в А объект Б! У тебя это чудом вышло - потому что оба класса разрабатываются в одном файле. А если бы было два заголовочника, и ты бы их друг в друге заинклудил, то компилятор бы с тобой поговорил) Ты дошёл до жизни такой, видимо, потому, что нуждался в слоте on_currentRowIndexChanged() из класса MainWindow, но на самом деле это не так.

И в любом случае ты неверно работал в keyPressEvent(QKeyEvent *event).
Ты не использовал переменную event, а значит обрабатывал нажатия на любые клавиши. А суть этого метода в том, чтобы получить нажатие конкретной клавиши, и это нажатие оригинально обработать.

Сообщение отредактировал abc - 12.3.2011, 1:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.3.2011, 0:40
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


ппц, это просто эпикфэйл!
Спасибо, разобрался!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 12.3.2011, 1:12
Сообщение #10


Участник
**

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

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




Репутация:   4  


я там подправил кое-что, перечитай :) сижу тут правлю формулирую уже полчаса, не зная, какой аспект фэйла и осветить-то))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 9:47