Как определить тип виджета в ячейке qtable? - PullRequest
9 голосов
/ 01 июня 2011

Я создал QTable с большим количеством элементов графического интерфейса, таких как comboBoxes и checkBoxes в различных ячейках.Я могу получить доступ к этим элементам, создав для них указатели.Я хочу знать, есть ли способ узнать, какой тип widget (comboBox или checkBox) имеет клетка?

Ответы [ 4 ]

14 голосов
/ 01 июня 2011

Ознакомьтесь с ответами на на этот вопрос . Принятый ответ получает имя класса (const char*) из метаобъекта виджета примерно так:

widget->metaObject()->className();

Есть еще один ответ, который предлагает использовать управление типами в C ++, но звучит гораздо менее громоздко (более громоздко?).

6 голосов
/ 01 июня 2011

Я бы предложил использовать qobject_cast https://doc.qt.io/qt-5/qobject.html#qobject_cast

Он работает как dynamic_cast, но немного лучше, поскольку может делать некоторые специфические предположения Qt (не зависит от RTTI).

Вы можете использовать это так:

if(QPushButton *pb = qobject_cast<QPushButton*>(widget)) {
    // it's a "QPushButton", do something with pb here
}
// etc
1 голос
/ 01 июня 2011

Вы можете написать следующие служебные функции:

bool IsCheckBox(const QWidget *widget)
{
   return dynamic_cast<const QCheckBox*>(widget) != 0;
}
bool IsComboBox(const QWidget *widget)
{
   return dynamic_cast<const QComboBox*>(widget) != 0;
}

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

EDIT:

Как отметил @Evan в комментарии, вы также можете использовать qobject_cast для приведения объекта вместо dynamic_cast. Смотрите примеры здесь .

0 голосов
/ 01 июня 2011

Вы можете использовать QObject::className(), чтобы получить тип виджета.

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