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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 29 30 [31] 32
451  Qt / Вопросы новичков / Re: Вопрос о QPushButton (toggle) : Март 04, 2012, 20:13
Я бы использовал
Код
C++ (Qt)
bool QObject::setProperty ( const char * name, const QVariant & value )
QObject * QObject::sender () const [protected]

В конструкторе
Код
C++ (Qt)
for (int i = 0; i < 5; i++)
   {
       QPushButton *Button = new QPushButton;
       Button->setCheckable(true);
       Button->setProperty("NumOfButton", i);
       connect(Button , SIGNAL(toggled(bool)), this, SLOT(onButtonToggled(bool)));
       ui->gridLayout->addWidget(Button,i,1);
   }

в слоте onButtonToggled(bool):
Код
C++ (Qt)
   if (!sender()) return;
   QPushButton *button = qobject_cast<QPushButton*> (sender());
   int numOfButton = button->property("NumOfButton").toInt();
   //.....
452  Qt / Дополнительные компоненты / Re: Класс для отсылки почты с вложениями по SMTP : Март 02, 2012, 01:50
Еще один SMTP клиент для Qt, с поддержкой ssl и html.
453  Qt / Вопросы новичков / Re: QDialog : Февраль 29, 2012, 22:47
QShotrcut
Сигналы и слоты

454  Qt / Вопросы новичков / Re: Нажатие клавиш : Февраль 29, 2012, 15:20
Огромное спасиба,за ваш труд!!!!!Но вы бы не могли объяснить как работает даная программа,в часности не пойму даный код
Код:
event->type() == QEvent::KeyPress ? b = true : b = false;
Потому что теперь мой танк может стрелять и ехать одновременно только когда обе клавиши нажаты,тоесть если я просто нажму и сразу отпущю кнопку ,предположим огня,то он остановится,если одновремменно удерживать кнопку огня и движения то все работает(только почемуто он ускоряется )?
Та строчка аналогична
Код
C++ (Qt)
if (event->type() == QEvent::KeyPress) b = true; else b = false;
То есть если событие QEvent::KeyPress, то разрешаем движение/стрельбу, иначе (событие QEvent::KeyRelease) запрещаем. Если тебе надо, что бы объект продолжал движение и после отпускания кнопок - просто не обрабатывай событие QEvent::KeyRelease для кнопок движения, а в обработчике QEvent::KeyPress назначай значение false всем переменным движения, кроме последнего. Плохой из меня учитель, но как мог Улыбающийся
455  Qt / Вопросы новичков / Re: Нажатие клавиш : Февраль 28, 2012, 23:33
Навскидку примерно так:

main.cpp
Код
C++ (Qt)
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MainWindow w;
   w.show();
 
   return a.exec();
}
 
 

mainwindow.h
Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QLabel>
#include <QSet>
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
public:
   explicit MainWindow(QWidget *parent = 0);
 
signals:
 
public slots:
 
protected:
   bool eventFilter(QObject *obj, QEvent *event);
   void updateKeys();
 
private:
   QLabel *label;
   bool upKey, downKey, rightKey, leftKey, fireKey;
 
};
 
#endif // MAINWINDOW_H
 
 

mainwindow.cpp
Код
C++ (Qt)
#include "mainwindow.h"
#include <QEvent>
#include <QKeyEvent>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent)
{
   label = new QLabel(this);
   installEventFilter(this);
   setCentralWidget(label);
   upKey = downKey = rightKey = leftKey = fireKey = false;
}
 
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
   if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease)
   {
       QKeyEvent* ke = static_cast<QKeyEvent*>(event);
       bool b;
       event->type() == QEvent::KeyPress ? b = true : b = false;
       switch(ke->key())
       {
       case Qt::Key_Up:
           upKey = b;
           break;
       case Qt::Key_Down:
           downKey = b;
           break;
       case Qt::Key_Right:
           rightKey = b;
           break;
       case Qt::Key_Left:
           leftKey = b;
           break;
       case Qt::Key_Space:
           fireKey = b;
           break;
       }
       updateKeys();
       return true;
   }
 
   return QObject::eventFilter(obj, event);
}
 
void MainWindow::updateKeys()
{
   QString text;
   if (upKey) text.append("Up ");
   if (downKey) text.append("Down ");
   if (rightKey) text.append("Right ");
   if (leftKey) text.append("Left ");
   if (fireKey) text.append("Fire ");
   label->setText(text);
}
 
 
456  Qt / Вопросы новичков / Re: Нажатие клавиш : Февраль 28, 2012, 21:13
Обработка одновременного нажатия клавиш на клаве.
457  Qt / Вопросы новичков / Re: QLineEdit нажать : Февраль 28, 2012, 20:39
Если тебе надо при получению фокуса клавиатурой менять цвет, а при потери фокуса - восстанавливать, то переопределять
Код
C++ (Qt)
   void focusInEvent(QFocusEvent *);
   void focusOutEvent(QFocusEvent *);
Или использовать void QObject::installEventFilter ( QObject * filterObj ), что бы обойтись без наследования.
458  Qt / Общие вопросы / Re: Как преобразовать строку QString : Февраль 27, 2012, 17:52
Только сейчас заметил, что в окно вывода ты QByteArray выводишь - ну дык и не будет русских букв там (в смысле в окне) никогда, ибо QtCreator скомпилирован с поддержкой уникода, a QByteArray этого самого уникода не понимает.
459  Qt / Общие вопросы / Re: Как преобразовать строку QString : Февраль 27, 2012, 17:25
ну по ходу кирилица.
Смеющийся Кирилических кодировок > 1
Цитировать
Нужно чтоб в "QByteArray s" присвоился "тест". тоесть если сделать:
Код:
qDebug() << s;
то чтоб вывелось слово "тест"
Нужно копать в сторону класса QTextCodec и его функций setCodecForCStrings() и setCodecForLocale().
460  Qt / Вопросы новичков / Re: Передача массива в метод класса : Февраль 27, 2012, 11:00
И да, код
Код
C++ (Qt)
void test::FullTestAdapter(QString Data[11][11])
{
 DataTester = Data;
 
}
 

а именно часть
Код
C++ (Qt)
 DataTester = Data;
не пройдет, ибо в с++ возможна лишь поэлементное копирование массивов, так как массив в с++ по сути есть указатель.
461  Qt / Вопросы новичков / Re: Передача массива в метод класса : Февраль 27, 2012, 10:48
Тебе же компилятор подсказывает, где именно проблема.

Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <QDebug>
 
void print (QString (*array)[11])
{
   for (int i = 0; i <11 ; ++ i)
       for (int x = 0; x < 11;++x)
           qDebug() << array[i][x];
}
 
int main(int argc, char *argv[])
{
   QString array[11][11];
   for (int i = 0; i <11 ; ++ i)
       for (int x = 0; x < 11;++x)
           array[i][x] = QString("%0 - %1").arg(i).arg(x);
   print(array);
}
А вообще стоит почитать, что представляют собой встроенные массивы в С++.
462  Qt / Общие вопросы / Re: Автомат, или фиксированная последовательность. Как? : Февраль 21, 2012, 09:36

10+ последовательностей, самая маленькая - 8 функций.
Каждый раз в очередь пихать - интересно, но маловнятно.

Создать 10+ очередей - интересно, но как тогда вызывать пятый элемент последовательности? Показает язык
А ты мой ответ видел? Там как раз без очередей и с любого места, и не надо каждый  раз в очередь ничего пихать.
463  Qt / Общие вопросы / Re: Автомат, или фиксированная последовательность. Как? : Февраль 21, 2012, 09:15
Можно сделать через указатели на функции и любой из контейнеров, кот. тебе удобней. Например:
Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <QVector>
#include <QDebug>
 
QVector<void(*)()> vecOfFunc;
 
void func0()
{
   qDebug() << "func0";
}
 
void func1()
{
   qDebug() << "func1";
}
 
void func2()
{
   qDebug() << "func2";
}
 
void func3()
{
   qDebug() << "func3";
}
 
void func4()
{
   qDebug() << "func4";
}
 
void startFrom(int i)
{
   if (vecOfFunc.size() <= i) return;
   for (; i < vecOfFunc.size(); ++i)
       (*vecOfFunc.at(i))();
}
 
 
int main(int argc, char *argv[])
{
   vecOfFunc.append(func0);
   vecOfFunc.append(func1);
   vecOfFunc.append(func2);
   vecOfFunc.append(func3);
   vecOfFunc.append(func4);
   startFrom(2);
}
 
 
that is all Улыбающийся

update: через QStateMachine сделать можно, но будет еще более неудобно и путано, чем через switch'и.
464  Разное / Говорилка / Re: двумерный массив : Февраль 19, 2012, 18:59
Собственно пример на структуре. Все просто и понятно Улыбающийся
Код:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QVector>
#include <QStringList>

struct X {
    int a;
    int b;
    QString c;
};

 bool lessThan(const X &x1, const X &x2)
 {
     return x1.a > x2.a;
 }

int main(int argc, char *argv[])
{

    //создание
    QVector<X> vecOfX;
    X x;
    for (int i = 0; i < 100; ++i)
    {

        x.a = i;
        x.b = i+202;
        x.c = QString("bla%0").arg(i+1);
        vecOfX.append(x);
    }
    //вставка
    x.a = 555;
    x.b = 2341;
    x.c = "bla556";
    vecOfX.insert(50, x);

    //прогонка
    foreach (X x1, vecOfX)
    {
        qDebug() << x1.a << x1.b << x1.c;
    }
   
    //сортировка в обратрую сторону по X.a
    qSort(vecOfX.begin(), vecOfX.end(), lessThan);

    foreach (X x1, vecOfX)
    {
        qDebug() << x1.a << x1.b << x1.c;
    }
}
465  Разное / Говорилка / Re: двумерный массив : Февраль 19, 2012, 18:20
эээ
а как ща элементы правильно вставить?
прогнать
отсортировать
перемешать (необязательно)
1. void QVector::insert ( int i, const T & value )
2. foreach
3. qSort
4. Вроде нет возможности "из коробки", самому реализовывать надо.
Страниц: 1 ... 29 30 [31] 32

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