Qt и C ++: перезапись или расширение класса - PullRequest
1 голос
/ 09 июля 2020

Я хочу добавить некоторые свойства (например, идентификатор) к QPushButton. Поэтому мне нужно расширить или перезаписать класс Q_WIDGETS_EXPORT QPushButton : public QAbstractButton

Как мне это сделать?

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

вам не нужно расширять класс, просто помещая в него идентификатор ... вместо этого используйте систему свойств .

, как указано в официальном do c здесь :

Свойство можно читать и записывать с помощью общих c функций QObject :: property () и QObject :: setProperty (), ничего не зная о владении class, кроме имени свойства.

вам просто нужно сделать:

ui->myButton->setProperty("Id", 123456);

также может быть другой объект, например строка (или даже ваш собственный класс, если вы определяете его для выполнения что)

ui->myButton->setProperty("_name", "123456");

для чтения свойства есть метод property(), но прочтите do c, потому что вы получите QVariant в качестве примера возврата:

 QVariant(int, 123456)
2 голосов
/ 09 июля 2020

Это действительно зависит от варианта использования. В наследовании от классов Qt- (Widget) нет проблем (а часто и предполагаемым способом) (поправьте меня, если я ошибаюсь). Итак, вы можете сделать:

class MyQPushButton : public QPushButton
{
     Q_OBJECT
public:
     MyQPushButton() : QPushButton(...) {}
private:
    int ID = -1;
}

Qt имеет очень хорошую документацию, и вы можете посмотреть исходники, чтобы узнать, что переопределить.

Вы также можете расширить новый класс с помощью QPushButton , но вам всегда приходится иметь дело со ссылкой QPushButton в вашем классе, если вы хотите, например, что-то подключить. В унаследованном классе вы можете подключить слоты и так далее. Но, например, вы могли бы сделать это:

class MyQPushButton 
{
public:
     MyQPushButton() {}
     const QPushButton& const GetQPushButton() { return pushButton; }
     const QPushButton* const GetQPushButtonPtr() { return &pushButton; }

private:
     QPushButton pushButton;
     int ID = -1;
}

Нет правильного и неправильного. Но я бы использовал наследование для Qt-классов.

...