Raadush
6th April 2012, 12:17
Hi,
I have this problem. I have main form where i have QTreeWidget and label. All I need is to change label text, when i press up and down in QTreeWidget accordingly. Here's sample code:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
tree = new QTreeWidget(this);
label = new QLabel(this);
QTreeWidgetItem *top = new QTreeWidgetItem(0);
top->setText(0,"top");
QTreeWidgetItem *top2 = new QTreeWidgetItem(0);
top2->setText(0,"top2");
QTreeWidgetItem *lower = new QTreeWidgetItem(0);
niz->setText(0,"lower");
QTreeWidgetItem *lower2 = new QTreeWidgetItem(0);
niz2->setText(0,"even lower");
tree->addTopLevelItem(top);
tree->addTopLevelItem(top2);
top2->addChild(lower);
niz->addChild(lower2);
QWidget *widget = new QWidget(this);
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(tree);
layout->addWidget(label);
widget->setLayout(layout);
this->setCentralWidget(widget);
connect(tree,SIGNAL(itemClicked(QTreeWidgetItem*,i nt)),this,SLOT(treeClicked(QTreeWidgetItem*,int))) ;
}
void MainWindow::treeClicked(QTreeWidgetItem* item, int col)
{
label->setText(item->text(0));
}
void MainWindow::keyPressEvent(QKeyEvent* event)
{
if((event->key() == Qt::Key_Up) || (event->key() == Qt::Key_Down))
{
label->setText(tree->currentItem()->text(0));
}
}
with mouse clicks, everything works fine, but keypress event works only when Im at the top or at the bottom of QTreeWidget (I assume that it's because QTreeWidget actually loses focus when im for example at the top of widget and i press Up, so MainWindow gets focus and is able to call keyPressEvent). But how to override keyPressEvent of treeWidget inside of main form? Thanks, so far I was unable to find working solution.
I have this problem. I have main form where i have QTreeWidget and label. All I need is to change label text, when i press up and down in QTreeWidget accordingly. Here's sample code:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
tree = new QTreeWidget(this);
label = new QLabel(this);
QTreeWidgetItem *top = new QTreeWidgetItem(0);
top->setText(0,"top");
QTreeWidgetItem *top2 = new QTreeWidgetItem(0);
top2->setText(0,"top2");
QTreeWidgetItem *lower = new QTreeWidgetItem(0);
niz->setText(0,"lower");
QTreeWidgetItem *lower2 = new QTreeWidgetItem(0);
niz2->setText(0,"even lower");
tree->addTopLevelItem(top);
tree->addTopLevelItem(top2);
top2->addChild(lower);
niz->addChild(lower2);
QWidget *widget = new QWidget(this);
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(tree);
layout->addWidget(label);
widget->setLayout(layout);
this->setCentralWidget(widget);
connect(tree,SIGNAL(itemClicked(QTreeWidgetItem*,i nt)),this,SLOT(treeClicked(QTreeWidgetItem*,int))) ;
}
void MainWindow::treeClicked(QTreeWidgetItem* item, int col)
{
label->setText(item->text(0));
}
void MainWindow::keyPressEvent(QKeyEvent* event)
{
if((event->key() == Qt::Key_Up) || (event->key() == Qt::Key_Down))
{
label->setText(tree->currentItem()->text(0));
}
}
with mouse clicks, everything works fine, but keypress event works only when Im at the top or at the bottom of QTreeWidget (I assume that it's because QTreeWidget actually loses focus when im for example at the top of widget and i press Up, so MainWindow gets focus and is able to call keyPressEvent). But how to override keyPressEvent of treeWidget inside of main form? Thanks, so far I was unable to find working solution.