Видимо я какого-то нюанса не понимаю.
Не могу слот подключить, за правильность и правдивость строчки подключения не ручаюсь.
Перепробовал различные варианты, статично, ссылки, пытался указать неймспейс и тд и тп.
Ткните носом в код пожалуйста.
tablewidget.h #ifndef TABLEWIDGET_H
#define TABLEWIDGET_H
//
#include <QtGui>
class QMenu;
class QAction;
class TableWidget : public QTableWidget
{
Q_OBJECT
public:
TableWidget(int, int );
virtual void keyPressEvent(QKeyEvent * event);
protected:
void contextMenuEvent(QContextMenuEvent *event);
private slots:
void SetGreen();
void SetRed();
private:
void createActions();
QAction *addAct;
QAction *removeAct;
signals:
// void MykeyEvent(int);
};
#endif
tablewidget.cpp#include "tablewidget.h"
TableWidget::TableWidget(int rows, int columns ) : QTableWidget( rows, columns)
{
setRowCount(rows);
setColumnCount(columns);
for (int i = 0; i < rows; ++i) {
QTableWidgetItem *item = new QTableWidgetItem(QString("Element")+QString::number(i));
setItem( i-1 , 1, item);
}
createActions();
}
void TableWidget::createActions()
{
addAct = new QAction(tr("SetGreen"), this);
connect(addAct, SIGNAL(triggered()), this, SLOT(SetGreen()));
removeAct = new QAction(tr("SetRed"), this);
connect(removeAct, SIGNAL(triggered()), this, SLOT(SetRed()));
}
void TableWidget::SetGreen()
{
qDebug() << "SetGreen"<< currentRow()<< currentColumn();
item(currentRow(), currentColumn())->setBackground(Qt::green);
}
void TableWidget::SetRed()
{
qDebug() << "remove"<< currentRow() << currentColumn();
item(currentRow(), currentColumn())->setBackground(Qt::red);
}
void TableWidget::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
menu.addAction(addAct);
menu.addAction(removeAct);
menu.exec(event->globalPos());
}
//void TableWidget::MykeyEvent( int key )
//{
//qDebug() << key;
//}
void TableWidget::keyPressEvent( QKeyEvent * event )
{
qDebug() << event->key();
if (event->key() == Qt::Key_F3)//16777266 F3
{
}
if (event->key() == Qt::Key_F4)//16777267 F4
{
}
if (event->key() == 43)//43 +
{
}
{
// emit MykeyEvent(event->key());
keyPressEvent(event);//далее вызов обработчика по дефолту, стрелки и всё такое
}
}
indi.h #ifndef INDI_H
#define INDI_H
#include <QtGui/QMainWindow>
#include "ui_indi.h"
class indi : public QMainWindow
{
Q_OBJECT
public:
indi(QWidget *parent = 0, Qt::WFlags flags = 0);
~indi();
Ui::indiClass ui;
private:
};
#endif // INDI_H
indi.cpp #include "indi.h"
indi::indi(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}
indi::~indi()
{
}
w.h#pragma once
#ifndef SCOOTERWINDOW_H
#define SCOOTERWINDOW_H
#include <QtGui>
#include <QTabWidget>
#include <QWidget>
#include <QList>
#include <QtGui/Qwidget>
#include <QProgressBar>
#include "tablewidget.h"
class W : public QWidget
{
Q_OBJECT
private:
void createActions();
QAction *GetGuard;
QAction *RemoveGuard;
QAction *Script1;
QAction *Script2;
QAction *Script3;
QAction *Script4;
QAction *Script5;
//Objects list, from SetFontSize void
QMenu *MainMenu;
QMenu *ActionMenu;
// QMenu *ActionSubMenu;
QMenu *ScriptMenu;
// QMenu *ScriptSubMenu;
QLabel *time_label;
QLabel *status_label;
//end List
QTimer *timer;
QHBoxLayout *Status_Layout;
QHBoxLayout *Table_Layout;
QVBoxLayout *mainLayout;
QHBoxLayout *Menu_Layout;
void setTableItem(int x, int y, QString value);
void SetRowColCountTable( int Row, int Col );
void FillTable(TableWidget * tableWidget);
void SetFontSizeAllWidget();
public:
TableWidget *tableWidget;
W(QToolBar * maintb,QString &servers_ip);
public slots:
void setTime();
void RowColToContent();
void GetGuardSlot();
void RemoveGuardSlot();
void KeyEvent(QKeyEvent *event);
private slots:
};
#endif
w.cpp #include <QtGui>
#include <QLineEdit>
#include <QPushButton>
#include "w.h"
#include <qapplication.h>
#include <QLabel>
#include <QTableWidget>
#include <QString>
#include <QStringList>
#include <QHeaderView>
static const char num[]="1234567890";
static const int const_TableItemsFontSize = 22;
static const int const_TimerFontSize = 22;
static const int const_StatusFontSize = 22;
static const int const_TableHorizontalHeaderFontSize = 22;
static const int const_TableVerticalHeaderFontSize = 22;
W::W(QToolBar * maintb, QString &servers_ip)
{
QMenuBar *MenuBar = new QMenuBar(this);
GetGuard = new QAction(tr("GetGuard"), this);
connect(GetGuard, SIGNAL(triggered()), this, SLOT(GetGuardSlot()));
RemoveGuard = new QAction(tr("RemoveGuard"), this);
connect(RemoveGuard, SIGNAL(triggered()), this, SLOT(RemoveGuardSlot()));
Script1 = new QAction(tr("Script1"), this);
// connect(Script1, SIGNAL(triggered()), this, SLOT(Script1Slot()));
Script2 = new QAction(tr("Script2"), this);
Script3 = new QAction(tr("Script3"), this);
Script4 = new QAction(tr("Script4"), this);
Script5 = new QAction(tr("Script5"), this);
// connect(GetGuard, SIGNAL(triggered()), this, SLOT(GetGuardSlot()));
// MenuBar->addSeparator();
MainMenu = new QMenu(MenuBar);
MainMenu = MenuBar->addMenu(QString::fromLocal8Bit("&Действия"));
MainMenu->addAction(GetGuard);
MainMenu->addAction(RemoveGuard);
MainMenu = MenuBar->addMenu(QString::fromLocal8Bit("&Сценарии"));
MainMenu->addAction(Script1);
MainMenu->addAction(Script2);
MainMenu->addAction(Script3);
MainMenu->addAction(Script4);
MainMenu->addAction(Script5);
Menu_Layout = new QHBoxLayout;
Menu_Layout->addWidget(MenuBar);
timer = new QTimer(this);
maintb->addSeparator();
Status_Layout = new QHBoxLayout;
status_label = new QLabel(QString::fromLocal8Bit("Строка состояния"));
Status_Layout->addWidget(status_label);
Status_Layout->addStretch();
time_label = new QLabel(QString::fromLocal8Bit("00:00:00"));
Status_Layout->addWidget(time_label);
tableWidget = new TableWidget(10,10);
FillTable(tableWidget);
Table_Layout = new QHBoxLayout;
Table_Layout->addWidget(tableWidget);
mainLayout = new QVBoxLayout;
mainLayout->addLayout(Menu_Layout);
mainLayout->addLayout(Table_Layout);
mainLayout->addLayout(Status_Layout);
setLayout(mainLayout);
//SLOT CONNECT
//connect(timer,SIGNAL(timeout()),this, SLOT(setTime()));
//connect(tableWidget,SIGNAL(itemChanged(QTableWidgetItem *)),this, SLOT(RowColToContent()));
QKeyEvent *loc_event;
// QSignalMapper *signalMapper = new QSignalMapper(this);
if (connect(tableWidget,SIGNAL(keyPressEvent(const QKeyEvent *)),this,SLOT(KeyEvent(const QKeyEvent *))))
{
qDebug() <<"конект пашет";
}
// tableWidget->keyPressEvent()
//init timers
timer->start(1000);
//style widgets
//QStringList horlst;
//horlst << QString::fromLocal8Bit("Карточка направления")
// << QString::fromLocal8Bit("Шлейф 1")
// << QString::fromLocal8Bit("Шлейф 2")
// << QString::fromLocal8Bit("Шлейф 3")
// << QString::fromLocal8Bit("Шлейф 4")
// << QString::fromLocal8Bit("Шлейф 5")
// << QString::fromLocal8Bit("Шлейф 6")
// << QString::fromLocal8Bit("Шлейф 7")
// << QString::fromLocal8Bit("Шлейф 8")
// << QString::fromLocal8Bit("Шлейф 9");
//tableWidget->setHorizontalHeaderLabels(horlst);
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
// всем плетей.. ой шрифтов!
SetFontSizeAllWidget();
// последний визуальный штрих - выравнивание таблицы по контенту итемов
RowColToContent();
}
void W::setTableItem(int x, int y, QString value)
{
QTableWidgetItem * item = new QTableWidgetItem(QString(value));
tableWidget->setItem(x, y,item);
return;
}
void W::SetRowColCountTable( int Row, int Col )
{
tableWidget->setRowCount(Row);
tableWidget->setColumnCount(Col);
int rnd;
for (int i = 0; i < Row; ++i)
{
for (int j = 0; j < Col; ++j)
{
// rnd = qrand;
//QTableWidgetItem * item1 = new QTableWidgetItem(QString::fromLocal8Bit(QString::number(rnd));
// tableWidget->setItem(i, j, item1);
}
}
tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Interactive);//is a very vary very stupid class
tableWidget->resizeColumnsToContents();
return;
}
void W::setTime()
{
time_label->setText(QDateTime::currentDateTime().toString(Qt::TextDate));
return;
}
void W::FillTable(TableWidget * tableWidget)
{
QFont loc_font;
for (int r = 0; r < tableWidget->rowCount(); ++r)
{
for (int c = 0; c < tableWidget->columnCount(); ++c)
{
QTableWidgetItem* item = new QTableWidgetItem(QString::number(qrand()%100500));
item->setBackground(Qt::gray);
item->setTextColor(Qt::white);
item->setTextAlignment(Qt::AlignCenter);
loc_font = item->font();
loc_font.setPixelSize(const_TableItemsFontSize);
item->setFont(loc_font);
tableWidget->setItem(r, c, item);
}
}
return;
}
void W::SetFontSizeAllWidget()
{
QFont loc_font;
for(int r=0;r<tableWidget->columnCount();r++)
for(int c=0;c<tableWidget->columnCount();c++)
{
loc_font = tableWidget->item(r,c)->font();
loc_font.setPixelSize(const_TableItemsFontSize);
tableWidget->item(r,c)->setFont(loc_font);
//tableWidget->item(r,c)->font().setPointSize(22);//font(font);
}
loc_font = tableWidget->horizontalHeader()->font();
loc_font.setPixelSize(const_TableHorizontalHeaderFontSize);
tableWidget->horizontalHeader()->setFont(loc_font);
loc_font = tableWidget->verticalHeader()->font();
loc_font.setPixelSize(const_TableVerticalHeaderFontSize);
tableWidget->verticalHeader()->setFont(loc_font);
loc_font = time_label->font();
loc_font.setPixelSize(const_TimerFontSize);
time_label->setFont(loc_font);
loc_font.setPixelSize(const_StatusFontSize);
status_label->setFont(loc_font);
}
void W::RowColToContent()
{
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
}
void W::createActions()
{
}
void W::GetGuardSlot()
{
tableWidget->item(tableWidget->currentRow(),tableWidget->currentColumn())->setBackgroundColor(Qt::green);
}
void W::RemoveGuardSlot()
{
tableWidget->item(tableWidget->currentRow(),tableWidget->currentColumn())->setBackgroundColor(Qt::red);
}
void W::KeyEvent( QKeyEvent *event )
{
qDebug() << "000000";
}
main.cpp#include <QtGui/QApplication>
#include "indi.h"
#include "w.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
indi window;
// window.show();
QString s;//параметры на вход
W *w = new W(window.ui.mainToolBar,s);
window.setCentralWidget(w);
window.showMaximized();
window.setWindowTitle(QString::fromLocal8Bit("Модуль индикации Приток-А(ver 0.1)"));
return a.exec();
}
Проблемка с этим подключением:
connect(tableWidget,SIGNAL(keyPressEvent(const QKeyEvent *)),this,SLOT(KeyEvent(const QKeyEvent *)))
Как правильно подключить этот слот?
Не взыщите за вероятную глупость, аптайм организма за 48 часов, близок дедлайн
Задача - Реагировать на клавиши +, F3, F4, Enter, некоторые экзотические сканкоды клавиш (USB цифровая клавиатура).
И всё это под Embedded устройство с ARM камушком и линем на борту, ещё клиент под вёнды (потому Qt ибо быстро, но я встрял).
Собирается используя Qt 4.6.0 MsVS2008 (под линь gc++ь на лине из гуя - фреймбуфер)
З.Ы. и я в порывах грохнул все moc файлы, как их пересоздать под MsVS2008? Пока просто пересоздал проект, скопировав сорцы, но думаю есть способ с меньшими телодвижениями.