Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: melifaro от Февраль 26, 2009, 22:27



Название: Qt Designer не могу разобраться
Отправлено: melifaro от Февраль 26, 2009, 22:27
Создаю в дизайнере форму на основе mainwindow, там же добавляю menuBar - menu1 - act_close, хочу чтобы по клику в меню по пункта "close" форма закрывалась...

1) в самом дизайнере не получилось т.к. связь сигнал - слот тянется только от самого menuBar'a, а не от отдельного QAction'a, в итоге форма закрывается при выборе любого пункта меню.
2) хотел связать в конструкторе, написать что-то типа connect(ui->menuBar->menu1->act_close,SIGNAL(click()),this,close()); но не смог найти даже menu1.

Помогите понять оба способа, видимо я что-то не нашел или не понял.


Название: Re: Qt Designer не могу разобраться
Отправлено: pastor от Февраль 26, 2009, 22:38
1) В дизайнере открываем Signal/Slot Editor, Добавляем новый коннект. Устанавливаем Sender - act_close, Signal - triggered(), Receiver - mainwindow, Slot - close().

Но лично мне не нравится создавать коннекты в дизайнере, лучше юзать способ 2)

2) И коннектить в конструкторе:

    connect(ui->act_close,SIGNAL(triggered()),this,close());


Название: Re: Qt Designer не могу разобраться
Отправлено: melifaro от Февраль 26, 2009, 23:00
1) Как добавить новый коннект? Кроме способа зажатия мышки на каком-то виджете и перетаскивания на другой, я никакого не видел

2) большое спасибо, всё оказалось проще чем я мог себе представить)


Название: Re: Qt Designer не могу разобраться
Отправлено: spirit от Февраль 27, 2009, 09:26
1) Как добавить новый коннект? Кроме способа зажатия мышки на каком-то виджете и перетаскивания на другой, я никакого не видел

в дизайнере есть Signal/Slot Editor вот там можно коннектов и нашарашить.


Название: Re: Qt Designer не могу разобраться
Отправлено: AAXEE от Февраль 27, 2009, 20:11
Но лично мне не нравится создавать коннекты в дизайнере, лучше юзать способ 2)
В этом есть что-то трушное=) Мне тоже не нравится.


Название: Re: Qt Designer не могу разобраться
Отправлено: lex_newton от Февраль 28, 2009, 16:54
Есть еще третий - интересный способ, о котором редко вспоминают. Но зачастую он оказывается весьма удобным ;)

В этом третьем случае не требуется писать connect(...). Необходимо лишь создать метод класса со строго определенным именем. Вот пример кода:

Код:
class CMainWindow : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
CMainWindow( QWidget * parent = 0, Qt::WFlags f = 0 );
private slots:
void on_action_item1_triggered();
};

CMainWindow::CMainWindow( QWidget * parent, Qt::WFlags f)
: QMainWindow(parent, f)
{
setupUi(this);
}
//

void CMainWindow::on_action_item1_triggered()
{
close();;
}

Здесь, action_item1 - это QAction, а triggered() - это испускемый этим QAction сигнал.
Таким образом можно задать слот для любого сигнала.
В этом случае коннект будет создается автоматически moc препроцессором.


Название: Re: Qt Designer не могу разобраться
Отправлено: Rcus от Февраль 28, 2009, 17:02
зашибись третий вариант :) в первом варианте строка коннекта генерируется автоматически и выполняется в setupUi, во втором мы ее пишем сами и выполняем в конструкторе, а в третьем вместо одной пишем 6 строк


Название: Re: Qt Designer не могу разобраться
Отправлено: lex_newton от Февраль 28, 2009, 17:09
зашибись третий вариант :) в первом варианте строка коннекта генерируется автоматически и выполняется в setupUi, во втором мы ее пишем сами и выполняем в конструкторе, а в третьем вместо одной пишем 6 строк
Ну дык разумеется, что это решение не для close(), который, сам по себе уже является слотом.
Но знания такой возможности автору темы пригодится.


Название: Re: Qt Designer не могу разобраться
Отправлено: Yar от Март 11, 2009, 10:21
А не подскажете как в дизайнере добавлять connect?
Я по кнопке F4 повесил click, но как указать что по этому событию делать?


Название: Re: Qt Designer не могу разобраться
Отправлено: spirit от Март 11, 2009, 10:23
в дизайнере есть "Signal/Slot Editor" так можно создавать коннекты.