Нажмите значок на Qt QTreeWidget - PullRequest
1 голос
/ 30 июня 2009

У меня есть виджет в форме Qt. Он показывает дерево файлов, показывает значок, представляющий что-то о них, и их имя.

Я ввел их, используя treeItem->setIcon(0, *icon) и treeItem->setText(0, text).

Причина, по которой я ввел оба значения в один и тот же столбец (0), заключается в том, что в противном случае значки не остались бы рядом с текстом, а всегда оставались бы слева, даже если текст был смещен вправо (потому что это потомок другого предмета).

Проблема в том, что теперь я не могу сказать, нажал ли пользователь на значок или на сам текст, и мне нужно разобраться с этим отдельно.

Итак, есть ли в любом случае больше информации, чем просто элемент дерева и столбец, когда объект в древовидном элементе щелкается, или есть какой-нибудь способ поместить их в отдельные столбцы и при этом иметь значки нормального поведения и текст должен иметь?

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 мая 2015

Я нашел следующее решение этой проблемы:

void MyTreeWidget::mousePressEvent( QMouseEvent* aEvent )
{
    QTreeWidget::mousePressEvent( aEvent );

    const QPoint clickedPosition    = aEvent->pos();
    const QRect itemRectangle       = visualItemRect( itemAt( clickedPosition ) );
    const int iconOffset            = itemRectangle.height() - iconSize().height();

    QRect iconRectangle;
    iconRectangle.setTopLeft( itemRectangle.topLeft() + QPoint( iconOffset, iconOffset ) );
    iconRectangle.setWidth( iconSize().width() );
    iconRectangle.setHeight( iconSize().height() );

    if ( iconRectangle.contains( clickedPosition ) )
    {
        qDebug() << "ICON clicked";
        // Emit an icon clicked SIGNAL.
    }
}
1 голос
/ 15 июля 2009

Я не думаю, что есть прямой способ получить больше информации, если вы просто используете сигналы clicked () или itemClicked (). Возможно, вам придется создать собственный класс, который наследует QTreeWidget, и переопределить одну из виртуальных функций мышиных событий.

mouseMoveEvent ( QMouseEvent * )
mousePressEvent ( QMouseEvent * )
mouseReleaseEvent ( QMouseEvent * )

Это не то, что я бы порекомендовал, если вы действительно не знаете, что делаете, и действительно должны это сделать.

Тем не менее, я не помню, чтобы где-нибудь видел виджет списка, где нажатие на значок обрабатывается иначе, чем нажатие текста в том же столбце. Поэтому, если вы ищете «значки нормального поведения и текст, которые должны иметь», вам, вероятно, следует искать другое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...