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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странности с наследованием QHeaderView в Qt 4.5.0  (Прочитано 5296 раз)
uriel
Гость
« : Март 05, 2009, 15:58 »

Наткнулся на интересное поведение и не могу понять, в чём дело: то ли я что-то не так делаю, то ли бага.
Собственно, код:
Код
C++ (Qt)
#include <QApplication>
#include <QTableView>
#include <QHeaderView>
#include <QStringListModel>
//
class HeaderView: public QHeaderView {
public:
HeaderView(Qt::Orientation orientation, QWidget * parent = 0)
: QHeaderView(orientation, parent)
{}
};
//
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
 
QStringListModel model(QStringList() << "foo");
 
QTableView v1;
v1.setWindowTitle("Standard header");
v1.setModel(&model);
v1.show();
 
QTableView v2;
v2.setWindowTitle("Custom header");
v2.setModel(&model);
v2.setHorizontalHeader(new HeaderView(Qt::Horizontal, &v2));
v2.show();
 
return app.exec();
}

Производный заголовок почему-то начисто перестаёт реагировать на мышь. То есть он не нажимается и даже банально не подсвечивается при наведении курсора.
« Последнее редактирование: Март 05, 2009, 16:15 от uriel » Записан
BRE
Гость
« Ответ #1 : Март 05, 2009, 16:01 »

А если добавить Q_OBJECT
Код
C++ (Qt)
class HeaderView: public QHeaderView {
       Q_OBJECT
public:
HeaderView(Qt::Orientation orientation, QWidget * parent = 0)
: QHeaderView(orientation, parent)
{}
};
 
Записан
developer
Гость
« Ответ #2 : Март 05, 2009, 16:02 »

Или переопределить нужные методы
Записан
uriel
Гость
« Ответ #3 : Март 05, 2009, 16:15 »

BRE:
В том проекте, где нашёл багу, Q_OBJECT и так стоит, но для надёжности всё равно добавил - результат тот же.

developer:
А какие именно? Это же, по идее, обыкновенный виджет со своими событиями. Каких-то хитрых виртуальных методов конкретно у QHeaderView не нашёл.

Записан
crackedmind
Гость
« Ответ #4 : Март 05, 2009, 16:23 »

Цитировать
QHeaderView *horizontal = new QHeaderView(Qt::Horizontal, &v2);
horizontal->setClickable(true);
horizontal->setHighlightSections(true);
v2.setHorizontal(horizontal);
« Последнее редактирование: Март 05, 2009, 16:47 от crackedmind » Записан
uriel
Гость
« Ответ #5 : Март 05, 2009, 16:43 »

Так...это, конечно, просто замечательно, благодарю. Действительно, дело не в производном классе а в ручном вызове метода setHorizontalHeader(). Только странно, что в документации нигде не сказано, что по-умолчанию заголовок создаётся почти что неактивным, а вьюхи инициализируют свои сами.
Записан
crackedmind
Гость
« Ответ #6 : Март 06, 2009, 07:35 »

Да вообще-то описано Улыбающийся

Цитировать
highlightSections : bool

This property holds whether the sections containing selected items are highlighted.

By default, this property is false.

Access functions:

bool highlightSections () const
void setHighlightSections ( bool highlight )
Записан
uriel
Гость
« Ответ #7 : Март 06, 2009, 19:02 »

Каюсь. Но теперь самому интересно, где же я так смотрел, что ничего не увидел. Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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