crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Не подключается слот
Гость_Гость_FZT_*_*
сообщение 7.11.2011, 19:34
Сообщение #1





Гости








    


Видимо я какого-то нюанса не понимаю.
Не могу слот подключить, за правильность и правдивость строчки подключения не ручаюсь.
Перепробовал различные варианты, статично, ссылки, пытался указать неймспейс и тд и тп.
Ткните носом в код пожалуйста.
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? Пока просто пересоздал проект, скопировав сорцы, но думаю есть способ с меньшими телодвижениями.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 7.11.2011, 20:57
Сообщение #2


Участник
**

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

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




Репутация:   2  


в коде у меня так
void fBooks::keyPressEvent(QKeyEvent * event)
{
    if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) {
    } else if (event->key() == Qt::Key_F10) {
    } else if (event->key() == Qt::Key_F3) {
    } else if (event->key() == Qt::Key_F7) {
    } else
        QWidget::keyPressEvent(event);
}

в хедере
private slots:
    void keyPressEvent(QKeyEvent *event);

все, больше ничего не надо. Собрать. Выполнить qmake и make (или как он там nmake)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fzt
  опции профиля:
сообщение 7.11.2011, 22:39
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 7.10.2010
Пользователь №: 2090

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




Репутация:   0  


Цитата(maint @ 8.11.2011, 2:57) *
Собрать. Выполнить qmake и make (или как он там nmake)

Разобрался, qmake - project, qmake, nmake;

А с коннектом я видимо что-то не понял...


QObject::connect(tableWidget,SIGNAL(keyPressEvent(QKeyEvent *)),this,SLOT(W::KeyEvent(QKeyEvent *)),Qt::DirectConnection)


Что-же тут может быть неправильно?

Цитата
Object::connect: No such signal TableWidget::keyPressEvent(QKeyEvent *) in .\w.cpp:78


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fzt
  опции профиля:
сообщение 8.11.2011, 0:24
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 7.10.2010
Пользователь №: 2090

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




Репутация:   0  


Дошло. У сигнала не нужно делать реализацию >_<, её крафтит moc.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 3.12.2024, 12:23