Russian Qt Forum
Июня 27, 2025, 09:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QAction  (Прочитано 3840 раз)
HunteX
Гость
« : Июня 04, 2011, 12:49 »

Всем привет! Имеются 2 формы (MainForm и Configs). Из первой формы вызываю вторую таким образом:
Код
C++ (Qt)
Configs cfgs;
cfgs.exec();

Добавил форму Configs к проекту и создал
configs.h:
Код
C++ (Qt)
#ifndef CONFIGS_H
#define CONFIGS_H
 
#include "ui_configs.h"
 
#include <QtGui>
#include <QDialog>
 
namespace Ui
{
class Configs;
}
 
class Configs : public QDialog
{
public:
Configs(QWidget * parent = 0);
 
private slots:
void SaveConfigs();
 
private:
Ui::Configs *ui;
 
void CreateActions();
};
 
#endif // CONFIGS_H

configs.cpp:
Код
C++ (Qt)
#include "configs.h"
#include <windows.h>
 
Configs::Configs(QWidget * parent) : QDialog(parent), ui(new Ui::Configs)
{
ui->setupUi(this);
 
CreateActions();
}
 
void Configs::CreateActions()
{
connect(ui->btnSave, SIGNAL(clicked()), this, SLOT(SaveConfigs()));
}
 
void Configs::SaveConfigs()
{
MessageBoxA(0, "", "", MB_OK);
 
}

На этой форме содержится кнопка btnSave, при нажатии на которую должен срабатывать слот Configs::SaveConfigs(). Этого не происходит.
Если меняю слот, скажем так:
Код
C++ (Qt)
connect(ui->btnSave, SIGNAL(clicked()), this, SLOT(close()));
То всё работает без проблем (close() срабатывает и форма закрывается) ...

Подскажите, в чем ошибка ?

P.S. Пишу на Visual Studio 2010 с Qt Add-In.

С Уважением, Андрей.
« Последнее редактирование: Июня 04, 2011, 12:53 от HunteX » Записан
alexman
Гость
« Ответ #1 : Июня 04, 2011, 13:00 »

Цитировать
На этой форме содержится кнопка btnSave, при нажатии на которую должен срабатывать слот Configs::SaveConfigs(). Этого не происходит.
А ты как это проверяешь?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Июня 04, 2011, 13:01 »

эм, а зачем MessageBoxA()? чем не устраивает QMessageBox::information() например?

может быть программе не нравится вызов этой WinAPI функции... пробовал ставить брейкпоинт в SaveConfigs() или добавлять туда какой-нить qDebug() для проверки?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
HunteX
Гость
« Ответ #3 : Июня 04, 2011, 13:02 »

Для проверки я ставлю тут брекпоинт, определяю, что слот тупо не вызывается Грустный
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Июня 04, 2011, 13:06 »

а вообще подожди, у QDialog уже ж есть кнопка ОК и есть слот accepted() - зачем выдумывать велосипед?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
madRoger
Гость
« Ответ #5 : Июня 04, 2011, 13:07 »

Ничего не забыл ?

Код:
class Configs : public QDialog
{
public:

Может так поможет :
Код:
class Configs : public QDialog
{
  Q_OBJECT
public:
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Июня 04, 2011, 13:07 »

В тело класса Configs забыл вставить Q_OBJECT.
Записан

Qt 5.11/4.8.7 (X11/Win)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Июня 04, 2011, 13:09 »

а вообще подожди, у QDialog уже ж есть кнопка ОК и есть слот accepted() - зачем выдумывать велосипед?
"Save" не значит "Accept/Close" )
Записан

Qt 5.11/4.8.7 (X11/Win)
HunteX
Гость
« Ответ #8 : Июня 04, 2011, 13:16 »

Спасибо, помогло добавление Q_OBJECT! Глупая ошибка Улыбающийся
Вот еще что хотел узнать: в Visual Studio при вызове Qt Designer нельзя создавать слоты при правом клике мышкой, скажем на кнопку. Видимо это специально сделано? То есть получается, что форма никак не связана с кодом, точнее такового просто нет, наверное именно из-за этого слоты не добавляются?

И примерно такой же вопрос, связанный с Qt Creator: К примеру, добавил сигнал к кнопке, указал слот. Где именно создается эта связь ? Или там существуют преопределенные слоты? К примеру
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 20.