Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: uriel от Март 05, 2009, 15:58



Название: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: 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();
}

Производный заголовок почему-то начисто перестаёт реагировать на мышь. То есть он не нажимается и даже банально не подсвечивается при наведении курсора.


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: BRE от Март 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)
{}
};
 


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: developer от Март 05, 2009, 16:02
Или переопределить нужные методы


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: uriel от Март 05, 2009, 16:15
BRE:
В том проекте, где нашёл багу, Q_OBJECT и так стоит, но для надёжности всё равно добавил - результат тот же.

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



Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: crackedmind от Март 05, 2009, 16:23
Цитировать
QHeaderView *horizontal = new QHeaderView(Qt::Horizontal, &v2);
horizontal->setClickable(true);
horizontal->setHighlightSections(true);
v2.setHorizontal(horizontal);


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: uriel от Март 05, 2009, 16:43
Так...это, конечно, просто замечательно, благодарю. Действительно, дело не в производном классе а в ручном вызове метода setHorizontalHeader(). Только странно, что в документации нигде не сказано, что по-умолчанию заголовок создаётся почти что неактивным, а вьюхи инициализируют свои сами.


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: crackedmind от Март 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 )


Название: Re: Странности с наследованием QHeaderView в Qt 4.5.0
Отправлено: uriel от Март 06, 2009, 19:02
Каюсь. Но теперь самому интересно, где же я так смотрел, что ничего не увидел. ;)