powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / [qt4] получение текущей позиции курсора QtableView
21 сообщений из 21, страница 1 из 1
[qt4] получение текущей позиции курсора QtableView
    #34980478
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо определять позицию при её изменении
методы: activated, entered, pressed, clicked - неподходят - они срабатывают на enter или click а надо на реагировать на перемещение курсора.
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34981263
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QTableWidget SIGNAL
void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )

QTableView Inherited by QTableWidget
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34981530
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо но ваш вариант не работает,
как и currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous );
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34981547
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в Qt3 на собственном наследнике от QTable всё работает. Не думаю, что в Qt4 Троллтехи лоханулись и до сих пор никто не указал на это. Таблицы юзают чуть не в каждой программе.
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34982092
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня QT 4.3.2 и такая штука там уже не прокатывает!
Код: plaintext
1.
2.
3.
4.
  bool b=connect(myTable,
          SIGNAL( currentCellChanged ( int, int, int, int) ),
          this,
          SLOT( myFnc(int, int , int , int  ) )
          );     
просто не проходит connect - не соединяются сигнал и слот
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34982168
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы они не соединялись в принципе в Qt4, то там не существовало бы таких понятий как сигнал и слот. А они там есть. И соединятся должны.
На вскидку могу вспомнить только четыре препятствия:
1
1.1 this не наследник QObject
1.2 в классе (this) отсутствует Q_OBJECT
2 - myTable перед connect ни чему не равен т.е. NULL;
3 - myFnc не существует. (вместо него myFunc, MyFnc и пр.)
4 - класс (this) объявлен прямо в файле CPP, а должен быть в файле H!
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34982364
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не одному из препятствий этот код не удовлетворяет:
main.cpp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
#include <QtGui>
#include <QtSql>

#include "dlgTest.h"

int main(int argc,char **argv)
{

    QApplication app(argc, argv);
    
    QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec); 
    

    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setDatabaseName("test_DB");
    db.setUserName("SYSDBA");
    db.setPassword("masterkey");
    //db.setHostName("localhost");
    if(!db.open()) 
    {
      QMessageBox::information( 0 ,
                               QObject::tr("eRRoR"),
                               QObject::tr("<b>can't</b> connect to database \"test_DB\"")
                               );
      return  1 ;	
   	}
  
    dlgTest dlg;
    dlg.showAll();
    return app.exec();
}
ui_dlgTest.h - сгенерирован uic c дизайнера
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
#ifndef UI_DLGTEST_H
#define UI_DLGTEST_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QTableView>
#include <QtGui/QVBoxLayout>

class Ui_dlgTest
{
public:
    QVBoxLayout *vboxLayout;
    QTableView *tableView;
    QLabel *lbInfo;

    void setupUi(QDialog *dlgTest)
    {
    if (dlgTest->objectName().isEmpty())
        dlgTest->setObjectName(QString::fromUtf8("dlgTest"));
    dlgTest->resize( 400 ,  300 );
    vboxLayout = new QVBoxLayout(dlgTest);
    vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
    tableView = new QTableView(dlgTest);
    tableView->setObjectName(QString::fromUtf8("tableView"));

    vboxLayout->addWidget(tableView);

    lbInfo = new QLabel(dlgTest);
    lbInfo->setObjectName(QString::fromUtf8("lbInfo"));

    vboxLayout->addWidget(lbInfo);


    retranslateUi(dlgTest);

    QMetaObject::connectSlotsByName(dlgTest);
    } // setupUi

    void retranslateUi(QDialog *dlgTest)
    {
    dlgTest->setWindowTitle(QApplication::translate("dlgTest", "Dialog",  0 , QApplication::UnicodeUTF8));
    lbInfo->setText(QApplication::translate("dlgTest", "TextLabel",  0 , QApplication::UnicodeUTF8));
    Q_UNUSED(dlgTest);
    } // retranslateUi

};

namespace Ui {
    class dlgTest: public Ui_dlgTest {};
} // namespace Ui

#endif // UI_DLGTEST_H
dlgTest.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#ifndef __dlgTest_H__
#define __dlgTest_H__

#include "ui_dlgTest.h"

class QSqlQueryModel;

class dlgTest: 
      public QDialog,
      public Ui_dlgTest
{
    Q_OBJECT

    QSqlQueryModel *sqlmodel;
  public:  
    dlgTest(QWidget *parent= 0 );  
    
  public slots:
    void  showAll();
    void  testSLOT(int currentRow, int currentColumn, int previousRow, int previousColumn ); 
 
};

#endif // __dlgTest_H__
dlgTest.cpp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <QtSql>
#include <QMessageBox>

#include "dlgTest.h"

dlgTest::dlgTest(QWidget *parent):QDialog(parent)
{
  setupUi(this);
  sqlmodel=new QSqlQueryModel();
}  
//----------------------------------------------------------------------------
void dlgTest::testSLOT(int currentRow, int currentColumn, int previousRow, int previousColumn )
{
  lbInfo->setText( QString::number(currentRow)+" from currentCellChanged()" );
}
//----------------------------------------------------------------------------
void dlgTest::showAll()
{
  bool b=
  connect(tableView,
          SIGNAL( currentCellChanged(int, int, int, int) ),
          this,
          SLOT( testSLOT(int, int, int, int) )
          );
  if( !b )
    QMessageBox::information(this, tr("eRRoR"), tr("!connect"));  
    
  sqlmodel->setQuery("select * from rec_type"); 
  tableView->setAlternatingRowColors( 1 );
  tableView->setModel(sqlmodel);  
  lbInfo->setText( QString::number(sqlmodel->rowCount()) );
  show();  
}

вот и все!
при запуске получаю: QMessageBox::information(this, tr("eRRoR"), tr("!connect"));
что здесь не так?
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34982611
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запусти эту прогу из консоли. Qt обычно в cout выводит ошибки, которые в Иксах не показывает никак.
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983376
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programister0
dlgTest.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#ifndef __dlgTest_H__
#define __dlgTest_H__

#include "ui_dlgTest.h"

class QSqlQueryModel;

class dlgTest: 
      public QDialog,
      public Ui_dlgTest
{
    Q_OBJECT

    QSqlQueryModel *sqlmodel;
  public:  
    dlgTest(QWidget *parent= 0 );  
    
  public slots:
    void  showAll();
    void  testSLOT(int currentRow, int currentColumn, int previousRow, int previousColumn ); 
 
};

#endif // __dlgTest_H__
А ты в своем test.pro добавил dlgTest.h в список HEADERS?
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983471
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
test.pro:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
FORMS += dlgTest.ui \

SOURCES += main.cpp \
           dlgTest.cpp \

HEADERS += ui_dlgTest.h \
           dlgTest.h \

QT += gui core sql
CONFIG += release qt resources 

Zmeishe
Запусти эту прогу из консоли.
всмысле?
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983477
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programister0 wrote:

> всмысле?
из cmd.exe. Или командной строки FAR Manager. Там много интересного
пишется во время работы.
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983523
Programister0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создал батник:
Код: plaintext
1.
test.exe
запустил - ничего нового там не увидел: c:\test_prog\test.exe и всЁ
может еще какие параметры надо допсать?
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983650
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Programister0 wrote:

> может еще какие параметры надо допсать?
1) Лучше все-таки из фара запускать или cmd, а не через батник, так как
2) в QTableView нет сигнала currentCellChanged, он есть в QTableWidget,
и об этом вам должно было быть написано в консоли открытым текстом во
время выполнения программы.
3) в QTableView см, например currentChanged (protected virtual) - на
предмет той же функциональности
4) и почаще пользуйтесь QtAssistant...
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983707
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV1) Лучше все-таки из фара запускать или cmd, а не через батник, так какЛучше конечно, но в данном случае без разницы. Ну нету у виндовых программ стандартных пайпов, нету. Это тебе не *никс.
В виндах по умолчанию все что посылается в stderr - посылается в никуда.
Для отладки в виндах НАДО сделать что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>

void myMessageOutput(QtMsgType type, const char *msg) {
	FILE *fp;
	fp = fopen("myprogram.log", "a");
	switch (type) {
	case QtDebugMsg:
		fprintf(fp, "Debug: %s\n", msg);
		break;
	case QtWarningMsg:
		fprintf(fp, "Warning: %s\n", msg);
		break;
	case QtCriticalMsg:
		fprintf(fp, "Critical: %s\n", msg);
		break;
	case QtFatalMsg:
		fprintf(fp, "Fatal: %s\n", msg);
		abort();
	}
	fclose(fp);
}

int main(int argc,char **argv) {
    qInstallMsgHandler(myMessageOutput);
    QApplication app(argc, argv);
.... etc
Ну или любым другим способом переопределить stderr на файл.
Тогда и будут видны все эти ругательства на несуществующие сигналы:
Код: plaintext
1.
2.
Warning: Object::connect: No such signal QTableView::currentCellChanged(int,int,int,int)
Warning: Object::connect:  (sender name:   'tableView')
Warning: Object::connect:  (receiver name: 'dlgTest')
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983840
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> Лучше конечно, но в данном случае без разницы. Ну нету у виндовых
> программ стандартных пайпов, нету. Это тебе не *никс.
Мне почему-то кажется, что qt под виндой свой собственный stderr должна
подсовывать, который в OutputDebugString все перенаправляет и делается
это через подсовывание им в либе (библиотека qtmain называется) своего
враппера - в либе определен WinMain, которые передает уже управление в
int main, но при этом не создает консоль, плюс определяет свой stderr и
stdout(помнится, в вин приложении в stderr и stdout писать можно, но
вот если только оно не консольное, это какой-то гадостью
заканчивается) - уж не знаю каким образом. Либо вытаскивает что-то свое
локальное с тем же именем, либо делает ещё что-то в этом духе.

По-моему, оно именно так работало, и при этом все сообщения были видны
либо в фаре (в чем не уверен), либо в окне отладки MSVC, которая эти
сообщения без проблем отображает.

Так ведь, или я что-то путаю ? (просто сейчас винт бэкапится, проверить
не могу)


--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34983846
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV wrote:

> Мне почему-то кажется, что
Не. Эта фишка с stderr была, вроде бы, аж в Qt 4.2.2, а потом её не
стало (кстати, автор версию не указал.). В 4.3.0 есть qDebug, qCritical
и т.д., как я понимаю:

void qDebug ( const char * msg, ... )
Calls the message handler with the debug message msg. If no message
handler has been installed, the message is printed to stderr. Under
Windows, the message is sent to the debugger
. This function does
nothing if QT_NO_DEBUG_OUTPUT was defined during compilation.
If you pass the function a format string and a list of arguments, it
works in similar way to the C printf() function.


Короче, судя по всему не через батник, а в отладчике надо запускать.
Например, в msvc по F5...
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34986029
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVМне почему-то кажется, что qt под виндой свой собственный stderr должна подсовыватьНет, не должна.
Под виндой есть два разных типа приложений, окошечные и консольные. У первых все три стандартных пайпа stdin/stdout/stderr системой не открываются, а для консольных приложений система открывает текстовое окно и направляет стандартные пайпы в него, а если консольное приложение запускается из консольного окна (cmd, FAR или что-нибудь подобное) то пайпы наследуются. Вот такая Windows странная система. QT всего-лишь следует заветам ОС. Если хочешь в виндах использовать qDebug/qWarning/etc то либо определяешь свой собственный хендлер как я показал, либо делаешь консольную программу изначально. В pro дописываешь CONFIG += console и получаешь виндовый стартап консольного типа со всеми его плюсами и минусами.

ErVПо-моему, оно именно так работало, и при этом все сообщения были видны
либо в фаре (в чем не уверен), либо в окне отладки MSVC, которая эти
сообщения без проблем отображает.С MSVC я не работаю, может она и делает открытие стандартных пайпов для окошечных приложений. Теоретически это возможно :)
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34986215
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> Нет, не должна.
> Под виндой есть два разных типа приложений, окошечные и консольные.
Ды я в курсе. Просто не приснилось же мне все это?
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34986431
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVДы я в курсе. Просто не приснилось же мне все это?А может и приснилось? :) Это вот в Линуксе приложение всегда имеет stderr, унаследованный от терминала или от X-сервера. Там qDebug с братьями работает сразу и без лишних телодвижений. А в виндах - увы.
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34986478
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> А может и приснилось? :)
Странно :-\
Ладно, мне в принципе пофигу, и разбираться и проверять сейчас влом.
Может потом и посмотрю, как оно там себя ведёт.
В доках написано, что сообщения передаются отладчику, значит, они должны
быть видны в одном из отладочных окон msvc (ЕМНИП, там же, где идут
мессаджи о подгрузке dll). Как в других средствах разработки под
виндой - не в курсе.
--
We are all going to hell and I'm driving the bus
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[qt4] получение текущей позиции курсора QtableView
    #34986488
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVВ доках написано, что сообщения передаются отладчику, значит, они должны быть видны в одном из отладочных окон msvc (ЕМНИП, там же, где идут мессаджи о подгрузке dll).Может и видны, не знаю. Но все же отладчик это одно, а консольный шелл это другое :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / [qt4] получение текущей позиции курсора QtableView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]