Как сгенерировать окно (виджет) при нажатии кнопки в qt

Я разработал графический интерфейс через Qt Creator в Linux. Этот дизайн состоит из нескольких полей, редактирования текста и нескольких кнопок.

Когда я нажимаю на кнопку, я хочу отобразить другое окно. Есть ли какой-либо вариант графического интерфейса для этого или какого-либо жесткого кода?


person Ram    schedule 08.06.2010    source источник


Ответы (2)


Вам нужны сигналы и слоты.

Вы должны подключить сигнал нажатия к пользовательскому слоту, созданному вами, вашего основного виджета.

Исправленный код, основанный на комментариях Патриса Бернассолы и Job.

В определении класса (файл .h) добавьте строки:

Q_OBJECT

private slots:
    void exampleButtonClicked();
private:
    QDialog *exampleDialog;

Макрос Q_OBJECT необходим, когда вы определяете сигналы или слоты в своих классах.

Переменная exampleDialog должна быть объявлена ​​в файле определения, чтобы иметь к ней доступ в слоте.

И вы должны его инициализировать, обычно это делается в конструкторе

ExampleClass::ExampleClass()
{
    //Setup you UI
    dialog = new QDialog;
}

В реализации класса (файл .cpp) добавьте код, который делает то, что вы хотите, в этом случае создайте новое окно.

void ExampleClass::exampleButtonClicked()
{
    exampleDialog->show();
}

А также подключить сигнал к слоту линией:

connect(exampleButton, SIGNAL(clicked()), this, SLOT(exampleButtonClicked()));

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

http://zetcode.com/tutorials/qt4tutorial/

http://doc.qt.io/archives/qt-4.7/tutorials-addressbook.html

person Miguel López    schedule 08.06.2010
comment
В вашем примере новый диалог будет показан и немедленно уничтожен, поскольку exampleDialog выйдет из области видимости в конце функции. Сделайте ваш диалог модальным или используйте переменную-член, чтобы диалог существовал вне этой функции. - person Patrice Bernassola; 08.06.2010
comment
Спасибо за исправление. Также забыл макрос Q_OBJECT. Это уже исправлено. - person Miguel López; 08.06.2010

при нажатии кнопки вы создаете другой виджет и показываете. другой вариант - виджет с накоплением, http://doc.trolltech.com/4.6/qstackedwidget.html < / а>

person Naruto    schedule 08.06.2010