как я могу наследовать от QWidget и QThread? - PullRequest
7 голосов
/ 08 апреля 2010

У меня есть такой класс

class GUI : public QWidget, public QThread

Когда я делаю выше, я получаю ошибки о сигналах подключения. The error says Reference to "connect" is ambiguous. Есть ли способ наследовать от обоих?

Спасибо

Ответы [ 3 ]

11 голосов
/ 08 апреля 2010

Вы не можете.И QWidget, и QThread наследуются (не виртуально) от QObject.Поэтому у вас нет виртуальной деривации, то есть двух копий QObject, что смущает компилятор.QObject был специально разработан таким образом.См .:

Есть некоторые, кто предположительно обошел это (не может найти ссылку сейчас,но это есть в Google, у меня была такая же проблема две недели назад), но это в лучшем случае небезопасно.

Редактировать: возможно, лучшим способом было бы иметь другой объект, наследуемый от QThread, и сохранить этот объект в качестве члена в вашем GUI классе.Такого рода обходные пути делают большинство людей в этом вопросе.

0 голосов
/ 22 января 2014

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

0 голосов
/ 08 апреля 2010

Вы не можете наследовать от нескольких объектов QObject.

Вы можете наследовать от одного, а другой сделать переменную-член и работать оттуда.

class GUI : public QWidget 
{
  QThread myThread;
};

Вы назвали графический интерфейс вашего класса - это основной графический интерфейс вашей программы? Смотрите примеры в папке Qt examples - у них есть примеры программ как для GUI , так и Threads .

...