Russian Qt Forum
Ноябрь 23, 2024, 06:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Контекстное меню в QTableWidget  (Прочитано 17152 раз)
catprog
Гость
« : Ноябрь 30, 2009, 17:17 »

Непонимающий а как его создать? Какой компонент взять? Так чтобы по клику правой кнопкой миши на таблице появлялось контекстное меню с моими пунктами, а лучше по клику на ячейке или строке.
Записан
BRE
Гость
« Ответ #1 : Ноябрь 30, 2009, 17:21 »

Посмотри на:
void QAbstractScrollArea::contextMenuEvent ( QContextMenuEvent * e )   [virtual protected]
Записан
MoPDoBoPoT
Гость
« Ответ #2 : Ноябрь 30, 2009, 17:36 »

Еще можно использовать QWidget::customContextMenuRequested() + Qt::CustomContextMenu.
Координаты точки расчитываются относительно viewport: tableView->viewport()->mapToGlobal(point)
Записан
catprog
Гость
« Ответ #3 : Ноябрь 30, 2009, 17:59 »

Спасибо, попробую
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Ноябрь 30, 2009, 18:23 »

Непонимающий а как его создать? Какой компонент взять?
Мы родом из дельфи? Мануалов не чтем? Улыбающийся
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
catprog
Гость
« Ответ #5 : Ноябрь 30, 2009, 18:45 »

Мы родом из дельфи? Мануалов не чтем? Улыбающийся
Да, первый кнопочный язык который учил, чтем, но там много и много сложно понятного, например нашол QMenu, но это похоже не то.
Записан
BRE
Гость
« Ответ #6 : Ноябрь 30, 2009, 18:47 »

Да, первый кнопочный язык который учил, чтем, но там много и много сложно понятного, например нашол QMenu, но это похоже не то.
То, посмотри примеры, вместе с Qt их идет множество и во многих используется контекстное меню.
Записан
s.c.o.r.p.i.o.n.
Гость
« Ответ #7 : Ноябрь 30, 2009, 20:51 »

а можете ткунть пальцем в какой нибудь пример? а то из стандартных я не нашел с контекстным меню
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Ноябрь 30, 2009, 21:20 »

пример
Записан

Юра.
NicK
Гость
« Ответ #9 : Ноябрь 30, 2009, 21:56 »

Код:
contextMNU=new QMenu();
contextMNU->addAction(actSomeAction);

Код:
TABLE_VIEW=new QTableView();
TABLE_VIEW->setContextMenuPolicy(Qt::CustomContextMenu);
connect(TABLE_VIEW, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(slotShowContextMenu(const QPoint &)));


Код:
void slotShowContextMenu(const QPoint &pos)
{
        contextMNU->exec(TABLE_VIEW->mapToGlobal(pos));
}
Записан
gmorgunov
Гость
« Ответ #10 : Декабрь 01, 2009, 06:45 »

Вот рабочий код, откопилируйте/запустите, думаю станет понятнее:
tablewidget.h
Код:
#ifndef TABLEWIDGET_H
#define TABLEWIDGET_H
//
#include <QtGui>
class QMenu;
class QAction;
class TableWidget : public QTableWidget
{
    Q_OBJECT
public:
     TableWidget(int, int );
protected:
     void contextMenuEvent(QContextMenuEvent *event);
private slots:
     void add();
     void remove();
private:
     void createActions();
     QAction *addAct;
     QAction *removeAct;
};
#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("Add"), this);
     connect(addAct, SIGNAL(triggered()), this, SLOT(add()));
     removeAct = new QAction(tr("Remove"), this);
     connect(removeAct, SIGNAL(triggered()), this, SLOT(remove()));
}
//-----------------------------------------------------------------------------------------------
void TableWidget::add()
 {
     qDebug() << "add"<< currentRow()<< currentColumn();
 }
//-----------------------------------------------------------------------------------------------
void TableWidget::remove()
 {
     qDebug() << "remove"<< currentRow() << currentColumn();
 }
//-----------------------------------------------------------------------------------------------
void TableWidget::contextMenuEvent(QContextMenuEvent *event)
 {
     QMenu menu(this);
     menu.addAction(addAct);
     menu.addAction(removeAct);
     menu.exec(event->globalPos());
 }
main.cpp
Код:
#include "tablewidget.h"
//
int main(int argc, char ** argv)
{
QApplication app( argc, argv );
TableWidget table(3,1);
table.show();
return app.exec();
}
Записан
core
Гость
« Ответ #11 : Октябрь 19, 2010, 17:20 »

Есть void contextMenuEvent( QContextMenuEvent * e ); в хидере

есть

 QObject::connect (ui->tableWidget,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(contextMenuEvent(QContextMenuEvent*)));
 и

 
Код:
  void MainWindow::contextMenuEvent( QContextMenuEvent * e )
    {

        QAction *pRemoveAction = new QAction("Видалити",this);
            connect(pRemoveAction ,SIGNAL(triggered()),this,SLOT(toolButton_DeleteTrack_Clicked()));
            //
            QMenu *pContextMenu = new QMenu( this);
            pContextMenu->addAction(pRemoveAction );
            //
            pContextMenu->exec( e->globalPos() );

            delete pContextMenu;
            pContextMenu = NULL;
}

код работает, но нужно, что менюшка была привязана к таблице (отображалась при правом клике только на таблицу) + проверять, произведен ли клик по ячейк или просто по таблице. подозреваю что привязка к таблице осуществляется через exec, но как конкретно ето сделат не знаю. С кликом на ячейке еще больше проблем. Помогите, кто знает как
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Октябрь 19, 2010, 19:19 »

QTableWidgetItem* itemAt( const QPoint& point ) const
Позицию брать из e->pos().
Записан

Qt 5.11/4.8.7 (X11/Win)
core
Гость
« Ответ #13 : Октябрь 19, 2010, 19:42 »

извиняюсь за нубство. а можна подробнее?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 23.