Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Novicheck от Апрель 29, 2015, 16:26



Название: QPushButton isChecked()
Отправлено: Novicheck от Апрель 29, 2015, 16:26
подскажите кто в теме - как реализовать условие нажатия кнопки?
Код:
    if (btn_spb->isChecked(true))
    {
        QString city = settings->value("2").toString();
    }
isChecked() не хочет работать


Название: Re: QPushButton isChecked()
Отправлено: Bepec от Апрель 29, 2015, 16:32
Учим C++. Читайте книжки умные про операторы сравнения :D

PS
Код:
btn_spb->isChecked() == true


Название: Re: QPushButton isChecked()
Отправлено: Novicheck от Апрель 29, 2015, 16:34
ирония понятна, но и это не работает - испробовано


Название: Re: QPushButton isChecked()
Отправлено: Kurles от Апрель 29, 2015, 16:49
ирония понятна, но и это не работает - испробовано
Значит ты в очередной раз что то делаешь не так.


Название: Re: QPushButton isChecked()
Отправлено: gil9red от Апрель 29, 2015, 16:56
ирония понятна, но и это не работает - испробовано
Должно сработать так же как и:
Код
C++ (Qt)
if (btn_spb->isChecked())
...



Название: Re: QPushButton isChecked()
Отправлено: Novicheck от Апрель 29, 2015, 17:08
Kurles - самые "эффективные" ответы на форуме...


Название: Re: QPushButton isChecked()
Отправлено: Novicheck от Апрель 29, 2015, 17:15
gil9red, понимаю что должен сработать, но что то не клеится...
полный код функции:
Код:
    settings = new QSettings("data_map.ini", QSettings::IniFormat);
    if (btn_spb->isChecked())
    {
        QString city = settings->value("2").toString();
    }
    QMessageBox::information(this, tr("Описание объекта..."), city);


Название: Re: QPushButton isChecked()
Отправлено: Bepec от Апрель 29, 2015, 18:04
Удивительные способности у новичков - давать абсолютно ненужную информацию и ждать ответов на невысказанные вопросы :D

1) вы что то делаете неправильно.
2) не пытайтесь сразу сделать сложное
3) у вас city в локальной области видимости и умирает покидая её.
4) вы привели кусок кода, а должны были привести весь код и ошибку компилятора, который ругается скорее всего на undefined :)


Название: Re: QPushButton isChecked()
Отправлено: gil9red от Апрель 29, 2015, 18:05
gil9red, понимаю что должен сработать, но что то не клеится...
полный код функции:
Код:
    settings = new QSettings("data_map.ini", QSettings::IniFormat);
    if (btn_spb->isChecked())
    {
        QString city = settings->value("2").toString();
    }
    QMessageBox::information(this, tr("Описание объекта..."), city);

У вас там компилятор матерится, потому что переменая city находится в другой области видимости, или у вас 2 переменные city, должно быть так:
Код
C++ (Qt)
   settings = new QSettings("data_map.ini", QSettings::IniFormat);
   if (btn_spb->isChecked())
   {
       QString city = settings->value("2").toString();
       QMessageBox::information(this, tr("Описание объекта..."), city);
   }
 

Или так:
Код
C++ (Qt)
   settings = new QSettings("data_map.ini", QSettings::IniFormat);
   QString city;
 
   if (btn_spb->isChecked())
       city = settings->value("2").toString();
 
   QMessageBox::information(this, tr("Описание объекта..."), city);
 


UPD. Bepec меня опередил :)


Название: Re: QPushButton isChecked()
Отправлено: Bepec от Апрель 29, 2015, 18:12
Краткость сестра таланта. Хотя все сообщения можно было уложить в
Цитировать
Учи C++.


Название: Re: QPushButton isChecked()
Отправлено: Авварон от Апрель 29, 2015, 19:24
Учи C++.

Чему он может его научить ???


Название: Re: QPushButton isChecked()
Отправлено: Bepec от Апрель 29, 2015, 19:46
Не объявлять переменную в локальной зоне видимости и применять её после закрытия зоны :D


Название: Re: QPushButton isChecked()
Отправлено: Novicheck от Май 02, 2015, 18:15
да, с зоной видимости вы правы однозначно - я накосячил, но "isChecked" все равно не срабатывает...
Код:
#include "map.h"

#include <QTextCodec>

map::map(QWidget *parent)
    : QWidget(parent)
{

}

/*! главная форма */
void map::iniMap()
{
    QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    setWindowTitle(tr("Карта Российской Федерации"));
    resize(1200, 700);

    vblayout = new QVBoxLayout();
    scrollArea = new QScrollArea();
    scrolVBlayout = new QVBoxLayout;
    label = new QLabel;
    vblayout->addWidget(scrollArea);
    scrollArea->setLayout(scrolVBlayout);
    scrollArea->setWidget(label);
    scrollArea->setWidgetResizable(true);
    setLayout(vblayout);
    label->setPixmap(QPixmap::fromImage(QImage("map_8000.jpg")));
    label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    label->setScaledContents(true);
    gl = new QGridLayout;

    btn_spb = new QPushButton(tr("Санкт-Петербург"));
    btn_spb->setFlat(true);
    btn_spb->setStyleSheet("font: 12pt");
    gl->addWidget(btn_spb, 3, 2, Qt::AlignCenter);

    btn_msc = new QPushButton(tr("Москва"));
    btn_msc->setFlat(true);
    btn_msc->setStyleSheet("font: 12pt");
    gl->addWidget(btn_msc, 4, 2, Qt::AlignCenter);

    connect(btn_spb, SIGNAL(clicked()), SLOT(message_slot()));
}

/*! вызов сообщения */
void map::message_slot()
{
    settings = new QSettings("data_map.ini", QSettings::IniFormat);
    QTextCodec *codec = QTextCodec::codecForName("CP1251");
    settings->setIniCodec(codec);
//    QString city;
    if (btn_spb->isChecked())
    {
        QString city = settings->value("2").toString();
        QMessageBox::information(this, tr("Описание объекта..."), city);
    }

}

map::~map()
{
   
}
в чем может быть проблема?


Название: Re: QPushButton isChecked()
Отправлено: torwig от Май 02, 2015, 18:46
Предположу, что кнопке нужно задать, чтобы она могла быть checked/unchecked:
Код:
btn_spb->setCheckable(true);
По умолчанию, кнопка not checkable.


Название: Re: QPushButton isChecked()
Отправлено: Bepec от Май 03, 2015, 00:20
Парень наверно просто не понимает принципа работы :)

Novicheck напиши простыми словами что ты хочешь получить: аля "Пользователь тык тык в кнопочку, кнопочка ага ага и программа пиу пиу" :)


Название: Re: QPushButton isChecked()
Отправлено: Novicheck от Май 06, 2015, 09:14
Спасибо, torwig, вы были правы)


Название: Re: QPushButton isChecked()
Отправлено: Alexu007 от Май 06, 2015, 10:23
Зачем кнопке isChecked()?

Кнопка подругому работает. Даёт сигнал нажатия, сигнал соединяется со слотом - обработчиком нажатия кнопки. В обработчике нажатия кнопки пишется код - что вам нужно, чтобы по нажатию кнопки делалось.


Название: Re: QPushButton isChecked()
Отправлено: carrygun от Май 06, 2015, 12:10
Зачем кнопке isChecked()?

Кнопка подругому работает. Даёт сигнал нажатия, сигнал соединяется со слотом - обработчиком нажатия кнопки. В обработчике нажатия кнопки пишется код - что вам нужно, чтобы по нажатию кнопки делалось.

Тулбаттоны могут принимать такие значения, это иногда удобно.