реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Простой вопрос qt
sergey sva
сообщение Jun 13 2011, 16:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Подскажите как передать сигнал в слот,компилируется без ошибок, но не чего не происходит при нажатии кнопки.
Код
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QProcess>
#include <QtGui/QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


   QMainWindow *MainWindow;
   QPushButton *pushButton;
    QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(buttonclic())  );


}


int ii = 0;

void MainWindow::buttonclic(){
    ui->progressBar->setValue(ii);
    ii++;


}


MainWindow::~MainWindow()
{

    delete ui;
}


Сделал так работает, не знаю насколько правильно, где правильнее разместить QObject::connect... ?
Код
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QProcess>
#include <QtGui/QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(buttonclic())  );

}


int ii = 0;

void MainWindow::buttonclic(){
    ui->progressBar->setValue(ii);
    ii++;


}


MainWindow::~MainWindow()
{

    delete ui;
}


Сообщение отредактировал sergey sva - Jun 13 2011, 16:53
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 13 2011, 21:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sergey sva @ Jun 13 2011, 19:53) *
но не чего не происходит при нажатии кнопки.
CODE
   QMainWindow *MainWindow;
   QPushButton *pushButton;
    QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(buttonclic())  );

Вы создали два указателя, которые без инициализации показывают куда угодно, только не на реальные объекты. Более того, в момент выхода из этой функции эти указатели будут уничтожены.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ig_z
сообщение Jun 14 2011, 12:20
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (sergey sva @ Jun 13 2011, 19:53) *
где правильнее разместить QObject::connect... ?


Если слоты сигналы применяются для связывания класса-интерфейса (обычно в имени присутствуе View) с QtGui, то логично разместить коннект в конструкторе этого класса, после того,как будут созданы все интерфейсные объекты.

Если речь идет о связывании пользовательских (ваших) объектов между собой (реализация логики работы приложения), то я обычно стараюсь размещать коннекты в конструкторе главного окна (если речь идет гуи пиложении), после создания и инициализации этих объектов.

Ну и разумеется в процессе работы вы можете использовать дисконнекты\коннекты для изменения поведения, где этого требует логика приложения.

И небольшой совет: включите консоль в дебаг версии. Если ядро не сможет связать сигнал и слот, вы получите сообщение.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 14 2011, 14:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Цитата
Если речь идет о связывании пользовательских (ваших) объектов между собой (реализация логики работы приложения), то я обычно стараюсь размещать коннекты в конструкторе главного окна

Конструктор главного окна mainwindow.h или mainwindow.ui ?

Сообщение отредактировал sergey sva - Jun 14 2011, 14:50
Go to the top of the page
 
+Quote Post
ig_z
сообщение Jun 14 2011, 14:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (sergey sva @ Jun 14 2011, 17:26) *
Конструктор главного вы имеете ввиду mainwindow.h или mainwindow.ui ?


Я имел ввиду наследника QMainWindow. В данном случае это class QLWin

CODE
namespace App
{


class QLWin : public QMainWindow
{
    Q_OBJECT

public:
    typedef QSharedPointer<QLWin> Ptr;

    static const int BIG_SPACE = 44;
    static const int SMALL_SPACE = 15;
    static QSize rightSize();

    QLWin(QWidget* parent);

private slots:
    void captureFinished();

private:
    void closeEvent(QCloseEvent* event);

    Excitation::ExcitationView*     _excitView;
    JackWrap::Wrapper*    _jack;
    Capture::Capture*     _capture;
    Capture::CaptureView* _captureView;
    Irs::IrsTableModel*   _irsTableModel;
    Irs::IrsView*         _irsView;
    Dir::WrkDirView*      _dirView;
};


}


А в конструкторе все склеивается

CODE
QLWin::QLWin(QWidget* parent)
    : QMainWindow(parent)
    , _excitView(new Excitation::ExcitationView(this))
    , _jack(new JackWrap::Wrapper(this))
    , _capture(new Capture::Capture(this))
    , _captureView(new Capture::CaptureView(this, _capture))
    , _irsTableModel(new Irs::IrsTableModel(this))
    , _irsView(new Irs::IrsView(this, _irsTableModel))
    , _dirView(new Dir::WrkDirView(this))
{
    setWindowTitle("QLoud");

    QVBoxLayout* mainLayout = new QVBoxLayout();

    mainLayout->addWidget(_dirView);
    mainLayout->addWidget(_excitView);
    mainLayout->addWidget(_captureView);
    mainLayout->addWidget(_irsView);

    //--------------------- LAYOUT FINISHING -------------------------------------------------------------
    QWidget* centralWidget = new QWidget();
    centralWidget->setLayout(mainLayout);
    setCentralWidget(centralWidget);


    connect(_jack, SIGNAL(jackIsFinished(float)),       _capture,     SLOT(stop(float)));
    connect(_jack, SIGNAL(jackSampleRate(unsigned int)),_captureView, SLOT(onJackSampleRate(unsigned int)));
    connect(_jack, SIGNAL(jackSampleRate(unsigned int)),_excitView,   SLOT(rateChanged(unsigned int)));
    connect(_jack, SIGNAL(jackShutdown()),              _captureView, SLOT(onJackShutdown()));
    connect(_jack, SIGNAL(JackXRun()),                  _captureView, SLOT(onJackXRun()));

    connect(_captureView, SIGNAL(startCapturing(const bool)), _dirView, SLOT(setDisable(const bool)));

    connect(_capture, SIGNAL(evStartJack(JackWrap::Info&)),   _jack,      SLOT(start(JackWrap::Info&)));
    connect(_captureView, SIGNAL(evStopCapture()),   _jack,      SLOT(stop()));
    connect(_captureView, SIGNAL(startCapturing_()), _jack,      SLOT(connect()));
    connect(_jack,        SIGNAL(JackIsReady()),     _excitView, SLOT(checkSignal()));

    connect(_excitView, SIGNAL(ExitationViewIsReady()), _captureView, SLOT(startCapture()));
    connect(_excitView, SIGNAL(abortCapture()),         _captureView, SLOT(stopCapture()));

    connect(_jack,    SIGNAL(JackIsFailed()),           _captureView, SLOT(stopCapture()));
    connect(_capture, SIGNAL(CaptureIsFailed()),        _captureView, SLOT(stopCapture()));

//Status Bar
    connect(_dirView,      SIGNAL(showStatus(const QString&)),     statusBar(),SLOT(showMessage(const QString&)));
    connect(_dirView,      SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int)));
    connect(_irsView,      SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int)));
    connect(_irsTableModel,SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int)));
    connect(_excitView,    SIGNAL(showStatus(const QString&)),     statusBar(),SLOT(showMessage(const QString&)));
    connect(_excitView,    SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int)));
    connect(_captureView,  SIGNAL(showStatus(const QString&)),     statusBar(),SLOT(showMessage(const QString&)));
    connect(_captureView,  SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int)));
// Capture
    connect(_capture, SIGNAL(workIsDone()), this, SLOT(captureFinished()));

    App::AppConfig::getInstance().notifyObservers();   //notify about current dir

//    _jack->connect();
    resize(App::AppConfig::getInstance().getSize());
    move(App::AppConfig::getInstance().getPos());
}
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 15 2011, 18:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Спасибо все понял sm.gif есть еще вопрос как в QT открыть ком порт это наверно будет не правильно fopen("/dev/tty", "r"); ?
Go to the top of the page
 
+Quote Post
ig_z
сообщение Jun 15 2011, 19:36
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (sergey sva @ Jun 15 2011, 21:47) *
Спасибо все понял sm.gif есть еще вопрос как в QT открыть ком порт это наверно будет не правильно fopen("/dev/tty", "r"); ?

Я в Qt пока не работал с портами. Но я бы попытался использовать все сущности в "портабельной" Qt-манере. Как пример QSerialDevice – a cross-platform library for serial devices framework that uses Qt4.

Тот код, что я приводил выше - проект QLoud. Изначально был сделан автором под линукс и совершенно не планировался для вин32. Это аудио приложение использует дисковые операции для аудиофайлов, библиотеку фурье анализа, построение графиков, ввод вывод аудио данных и тд. Благодаря тому, что все компоненты приложения были изначально сделаны портабельными, я собрал вин32 таргет за час полтора (это вместе с закачкой и чтением ридми). В ближайшем будущем планирую в аналоговом разделе выложить сборку вин32 для пробы.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 15 2011, 19:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Прочитаю про библиотеку QSerialDevice.
А с PCI устройством наверно только через fopen("...", "r"); или тоже есть библиотеки QT ?


Сообщение отредактировал sergey sva - Jun 15 2011, 19:50
Go to the top of the page
 
+Quote Post
evg123
сообщение Jun 16 2011, 07:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Цитата(sergey sva @ Jun 15 2011, 23:44) *
Прочитаю про библиотеку QSerialDevice.
А с PCI устройством наверно только через fopen("...", "r"); или тоже есть библиотеки QT ?

Кросплатформенный класс для работы с серийным портом в Qt. (работал с ним в винде, хотя с линухой всё должно быть ещё проще).
http://sourceforge.net/projects/qextserialport/
Дока - исчерпывающая:
http://code.google.com/p/qextserialport/downloads/list
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 16 2011, 11:23
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Все таки как правильно работать c pci устройством?, сделали драйвер подгрузили зарегистрировали в папке /dev появилось устройство mydevicepci как теперь его открыть?, в винде понятно через createfile() а в линуксе и qt как правильно это сделать? в голову кроме fopen не чего не приходит
это и не удивительно с qt только 2 дня разбираюсь sm.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 17 2011, 08:16
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sergey sva @ Jun 16 2011, 15:23) *
Все таки как правильно работать c pci устройством?, сделали драйвер подгрузили зарегистрировали в папке /dev появилось устройство mydevicepci как теперь его открыть?, в винде понятно через createfile() а в линуксе
open()
Цитата
в голову кроме fopen не чего не приходит
Это от драйвера зависит. Если read/write достаточно, то и fopen подойдет
Цитата
и qt как правильно это сделать?
QFile вместо fopen

Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 17 2011, 14:06
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Понятно потихоньку все начинает проясняться sm.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01468 секунд с 7
ELECTRONIX ©2004-2016