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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [solved]signal clicked и slot с параметром qstring  (Прочитано 4322 раз)
Blayder
Гость
« : Июль 11, 2009, 18:43 »

идея такова:
к трем кнопкам по сигналу клика прикручивается слот принимающий параметр типа qstring таким образом
Код:
    QPushButton *btnSelAll = new QPushButton("&All");
    connect(btnSelAll,SIGNAL(clicked()),this,SLOT(sqlRemonti(const QString&)));

и собстна сам слот:
Код:
bool sql_test::sqlRemonti(const QString& list)
{
    bool res;
    if (db.isOpen())
    {
switch( list )
{
    case 1:
model->setQuery("SELECT * FROM remonti where rem_pab is not NULL AND klie_san IS NULL");
    case 2:
model->setQuery("SELECT * FROM remonti where rem_pab is NULL");
    default:
model->setQuery("SELECT * FROM remonti");
}
qDebug() << list;
dbView->setModel(model);
dbView->setSelectionBehavior(QAbstractItemView::SelectRows);
dbView->resizeColumnsToContents();
dbView->show();

res = true;
    } else {
sysico->showMessage("Error!", "Not connected to MySQL server!", QSystemTrayIcon::Critical);
res = false;
    }
    return res;
}

и его обьявление в заголовочном файле:

Код:
public slots:
     bool sqlRemonti(const QString& list);

Вся идея такова:
 - имеется 3 кнопки и 1 слот.
 - в зависимости от того, какая кнопка нажата, через переданный параметр слота определяется какой запрос выполнить.

т.е. таким образом хочу вместо трех слотов с разными запросами сделать 1 слот с параметром.
какова проблема:
 - switch отказывается принимать QString переменную, жалуясь шо она не интеджер....
 - если закоментить свитч и откомпилить прогу, при старте в логе проскакивют строки, что :

Код:
QObject::connect: Incompatible sender/receiver arguments
        QPushButton::clicked() --> sql_test::sqlRemonti(QString)
QObject::connect: Incompatible sender/receiver arguments
        QPushButton::clicked() --> sql_test::sqlRemonti(QString)
QObject::connect: Incompatible sender/receiver arguments
        QPushButton::clicked() --> sql_test::sqlRemonti(QString)

Поскольку пока тока пытаюсь освоить кьют, такие проблемы и возникают... все наверно весьма элементарно  Грустный
ОС - ArchLinux, Qt v. 4.5.2-1
« Последнее редактирование: Июль 11, 2009, 20:06 от Blayder » Записан
Rcus
Гость
« Ответ #1 : Июль 11, 2009, 18:45 »

Assistant -> QSignalMapper
Записан
Blayder
Гость
« Ответ #2 : Июль 11, 2009, 19:15 »

Премного благодарен, Rcus:
с QSignalMapper вышло оч хорошо, но как вот switch со стрингами работать заставить - еще открыто...
Пока попробовал через if ... else прописать и работает, но хотелось бы со switch сделать как надобно...
Записан
spectre71
Гость
« Ответ #3 : Июль 11, 2009, 19:19 »

Премного благодарен, Rcus:
с QSignalMapper вышло оч хорошо, но как вот switch со стрингами работать заставить - еще открыто...
Пока попробовал через if ... else прописать и работает, но хотелось бы со switch сделать как надобно...
Используй Hash
Записан
Blayder
Гость
« Ответ #4 : Июль 11, 2009, 20:06 »

Если я правильно нашел, то Вы имели ввиду:
Код:
 QHash<QString, int> hash;

 hash["one"] = 1;
 hash["three"] = 3;
 hash["seven"] = 7;

Если так, то ИМХО всеравно проще поюзать if ... else в конткретно моем варианте:

Код:
if ( list == "Ungiven" )
{
    model->setQuery("SELECT * FROM remonti where rem_pab is not NULL AND klie_san IS NULL");
} else if (list == "Undone" )
{
model->setQuery("SELECT * FROM remonti where rem_pab is NULL");
} else
{
model->setQuery("SELECT * FROM remonti");
}

Но приму к сведению ваш совет. Перимного благодарен всем, кто подсказал  Строит глазки
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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