Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Qt C++ QTableView - jak uzyskać numer indexu w ktory sie kliknie

Ostatnio zmodyfikowano 2016-01-01 12:44
Autor Wiadomość
yerbaguy
Temat założony przez niniejszego użytkownika
Qt C++ QTableView - jak uzyskać numer indexu w ktory sie kliknie
» 2015-12-30 01:53:21
Witam,

     Czy mógłbym poprosić o wskazówkę w jaki sposób pobrać numer wiersza komponentu QTableView w który aktualnie kliknąłem. Przegooglałem trochę stron, znalazłem parę informacji, ale dalej bez pozytywnych rezultatów.
     Ten kawałek implementacji który mam i nie działa wygląda jak poniżej:

    
C/C++
void Practice_TimeTable::on_tableView_day_timetable_activated( const QModelIndex & index )
{
    int rows = ui->tableView_day_timetable->currentIndex().row();
    qDebug() << rows;
}
P-142574
mateczek
» 2015-12-30 06:23:10
C/C++
void Practice_TimeTable::on_tableView_day_timetable_activated( const QModelIndex & index )
{
    qDebug() << "jestem w slocie row= " << index.row();
}
nie sprawdzałem (mogę dopiero po południu) ale ja tak bym próbował
P-142575
yerbaguy
Temat założony przez niniejszego użytkownika
» 2015-12-31 08:40:25
dzięki za odpowiedz mateczek.

  To już zrobiłem. Trochę sobie googlami pomogłem. Połączyłem SLOT z QTableView, jak poniżej:

 
C/C++
connect( ui->tableView_day_timetable->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ), SLOT( slotSelectionChange( QItemSelection, QItemSelection ) ) );

  Slot:

 
C/C++
void Practice_TimeTable::slotSelectionChange( const QItemSelection &, const QItemSelection & )
{
   
   
    QModelIndexList selection = ui->tableView_day_timetable->selectionModel()->selectedIndexes();
   
    foreach( QModelIndex index, selection )
    {
        row = index.row();
    }
   
    qDebug() << row;
}


  Teraz kolejna rzecz nad którą się zastanawiam to jak przekazać do widoku innej klasy ( widok tej innej klasy się uruchamia w momencie kliknięcia w dany index komponentu QTableView ) wartość tej zmiennej row.

  Chcę zrobić tak żeby w momencie uruchamiania tego widoku, była odpytywana baza o zawartość danego wiersza czy coś tam jest czy nie na podstawie wartości tej zmiennej. Sam widok uruchamiam w metodzie QTableView - clicked - jak poniżej:

 
C/C++
Nazwa_klasy * wkaznik_do_nazwy_klasy = new Nazwa_klasy();
wkaznik_do_nazwy_klasy->run();


 Przekazac tę zmienną można np poprzez dziedziczenie. Tylko właśnie tutaj mam z tym problem. Dziedziczenie klas zrobiłem jak poniżej:

 
C/C++
#ifndef PRACTICE_TIMETABLE_H
#define PRACTICE_TIMETABLE_H
#endif



#ifndef PRACTICE_TIMETABLE_ADD_H
#define PRACTICE_TIMETABLE_ADD_H


#include <QMainWindow>

#include "practice_timetable.h"


namespace Ui {
    class Practice_TimeTable_Add;
}



class Practice_TimeTable_Add
    : public QMainWindow
     , public Practice_TimeTable
{
    Q_OBJECT
   
public:
    explicit Practice_TimeTable_Add( QWidget * parent = 0 );
    ~Practice_TimeTable_Add();
   
private:
    Ui::Practice_TimeTable_Add * ui;
};

#endif // PRACTICE_TIMETABLE_ADD_H

 ale jako wynik kompilacji dostaję błąd:

 
C/C++
expected class - name before '(' token
P-142616
mateczek
» 2015-12-31 21:35:04
wymiana danych między obiektami różnych klas można zrealizować za pomocą mechanizmu sygnałów i slotów

https://www.youtube.com/watch​?v=bxmdI4O3TGo

wymiana danych (sterowanie) wątkiem

https://www.youtube.com/watch​?v=W3omS_AXZIs

P-142650
yerbaguy
Temat założony przez niniejszego użytkownika
» 2016-01-01 12:44:50
dzięki za informacje. A w ogóle to Najlepszego w Nowym Roku :). A powiedz jak sobie poradzić w momencie gdy np są dwie klasy i teraz w drugiej włączam info o pierwszej poprzez include czyli np:

C/C++
#include "pierwsza.h"

natomiast w pierszej włączam info o drugiej tez przez include po to żeby w metodzie on click komponentu QTableView dodać kod, który to spowoduje, że w momencie kliknięcia w którykolwiek index QTableView wyświetli się widok tej drugiej klasy? Chodzi poprostu o to, że teraz zacząl być problem z

C/C++
forward declaration

Znalazłem informację, że można np wykorzystać MACRO

C/C++
QT_FORWARD_DECLARE_CLASS( np.klasa_druga )

, niestety jednak to nie działa

dostaję błąd typu:

C/C++
'Practice_TimeTable' does not name a type
P-142654
« 1 »
  Strona 1 z 1